about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_hir_typeck/src/method/suggest.rs12
-rw-r--r--src/test/ui/illegal-sized-bound/mutability-mismatch-arg.fixed2
-rw-r--r--src/test/ui/illegal-sized-bound/mutability-mismatch-arg.rs2
-rw-r--r--src/test/ui/illegal-sized-bound/mutability-mismatch-arg.stderr5
-rw-r--r--src/test/ui/illegal-sized-bound/mutability-mismatch.rs6
-rw-r--r--src/test/ui/illegal-sized-bound/mutability-mismatch.stderr14
-rw-r--r--src/test/ui/suggestions/imm-ref-trait-object.rs2
-rw-r--r--src/test/ui/suggestions/imm-ref-trait-object.stderr5
8 files changed, 21 insertions, 27 deletions
diff --git a/compiler/rustc_hir_typeck/src/method/suggest.rs b/compiler/rustc_hir_typeck/src/method/suggest.rs
index 5a43db69fd4..fedffe3d81e 100644
--- a/compiler/rustc_hir_typeck/src/method/suggest.rs
+++ b/compiler/rustc_hir_typeck/src/method/suggest.rs
@@ -177,9 +177,17 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
             }
 
             MethodError::IllegalSizedBound(candidates, needs_mut, bound_span, self_expr) => {
-                let msg = format!("the `{}` method cannot be invoked on a trait object", item_name);
+                let msg = if needs_mut {
+                    with_forced_trimmed_paths!(format!(
+                        "the `{item_name}` method cannot be invoked on `{rcvr_ty}`"
+                    ))
+                } else {
+                    format!("the `{item_name}` method cannot be invoked on a trait object")
+                };
                 let mut err = self.sess().struct_span_err(span, &msg);
-                err.span_label(bound_span, "this has a `Sized` requirement");
+                if !needs_mut {
+                    err.span_label(bound_span, "this has a `Sized` requirement");
+                }
                 if !candidates.is_empty() {
                     let help = format!(
                         "{an}other candidate{s} {were} found in the following trait{s}, perhaps \
diff --git a/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.fixed b/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.fixed
index 260ef5458d4..74f3c887f02 100644
--- a/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.fixed
+++ b/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.fixed
@@ -1,6 +1,6 @@
 // run-rustfix
 fn test(t: &mut dyn Iterator<Item=&u64>) -> u64 {
-     *t.min().unwrap() //~ ERROR the `min` method cannot be invoked on a trait object
+     *t.min().unwrap() //~ ERROR the `min` method cannot be invoked on
 }
 
 fn main() {
diff --git a/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.rs b/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.rs
index 7a1656507f2..3b02c5a5ad1 100644
--- a/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.rs
+++ b/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.rs
@@ -1,6 +1,6 @@
 // run-rustfix
 fn test(t: &dyn Iterator<Item=&u64>) -> u64 {
-     *t.min().unwrap() //~ ERROR the `min` method cannot be invoked on a trait object
+     *t.min().unwrap() //~ ERROR the `min` method cannot be invoked on
 }
 
 fn main() {
diff --git a/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.stderr b/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.stderr
index 9b4b9b65d10..89613bd5c20 100644
--- a/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.stderr
+++ b/src/test/ui/illegal-sized-bound/mutability-mismatch-arg.stderr
@@ -1,11 +1,8 @@
-error: the `min` method cannot be invoked on a trait object
+error: the `min` method cannot be invoked on `&dyn Iterator<Item = &u64>`
   --> $DIR/mutability-mismatch-arg.rs:3:9
    |
 LL |      *t.min().unwrap()
    |         ^^^
-  --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
-   |
-   = note: this has a `Sized` requirement
    |
 help: you need `&mut dyn Iterator<Item = &u64>` instead of `&dyn Iterator<Item = &u64>`
    |
diff --git a/src/test/ui/illegal-sized-bound/mutability-mismatch.rs b/src/test/ui/illegal-sized-bound/mutability-mismatch.rs
index aa9b3d03891..01bb3537c2d 100644
--- a/src/test/ui/illegal-sized-bound/mutability-mismatch.rs
+++ b/src/test/ui/illegal-sized-bound/mutability-mismatch.rs
@@ -4,7 +4,6 @@ pub trait MutTrait {
     fn function(&mut self)
     where
         Self: Sized;
-    //~^ this has a `Sized` requirement
 }
 
 impl MutTrait for MutType {
@@ -17,7 +16,6 @@ pub trait Trait {
     fn function(&self)
     where
         Self: Sized;
-    //~^ this has a `Sized` requirement
 }
 
 impl Trait for Type {
@@ -26,9 +24,9 @@ impl Trait for Type {
 
 fn main() {
     (&MutType as &dyn MutTrait).function();
-    //~^ ERROR the `function` method cannot be invoked on a trait object
+    //~^ ERROR the `function` method cannot be invoked on `&dyn MutTrait`
     //~| HELP you need `&mut dyn MutTrait` instead of `&dyn MutTrait`
     (&mut Type as &mut dyn Trait).function();
-    //~^ ERROR the `function` method cannot be invoked on a trait object
+    //~^ ERROR the `function` method cannot be invoked on `&mut dyn Trait`
     //~| HELP you need `&dyn Trait` instead of `&mut dyn Trait`
 }
diff --git a/src/test/ui/illegal-sized-bound/mutability-mismatch.stderr b/src/test/ui/illegal-sized-bound/mutability-mismatch.stderr
index 0120b9f91e9..2ca571d9b79 100644
--- a/src/test/ui/illegal-sized-bound/mutability-mismatch.stderr
+++ b/src/test/ui/illegal-sized-bound/mutability-mismatch.stderr
@@ -1,20 +1,14 @@
-error: the `function` method cannot be invoked on a trait object
-  --> $DIR/mutability-mismatch.rs:28:33
+error: the `function` method cannot be invoked on `&dyn MutTrait`
+  --> $DIR/mutability-mismatch.rs:26:33
    |
-LL |         Self: Sized;
-   |               ----- this has a `Sized` requirement
-...
 LL |     (&MutType as &dyn MutTrait).function();
    |                                 ^^^^^^^^
    |
    = help: you need `&mut dyn MutTrait` instead of `&dyn MutTrait`
 
-error: the `function` method cannot be invoked on a trait object
-  --> $DIR/mutability-mismatch.rs:31:35
+error: the `function` method cannot be invoked on `&mut dyn Trait`
+  --> $DIR/mutability-mismatch.rs:29:35
    |
-LL |         Self: Sized;
-   |               ----- this has a `Sized` requirement
-...
 LL |     (&mut Type as &mut dyn Trait).function();
    |                                   ^^^^^^^^
    |
diff --git a/src/test/ui/suggestions/imm-ref-trait-object.rs b/src/test/ui/suggestions/imm-ref-trait-object.rs
index 288d6c699f5..c1c969b90e4 100644
--- a/src/test/ui/suggestions/imm-ref-trait-object.rs
+++ b/src/test/ui/suggestions/imm-ref-trait-object.rs
@@ -1,5 +1,5 @@
 fn test(t: &dyn Iterator<Item=&u64>) -> u64 {
-     t.min().unwrap() //~ ERROR the `min` method cannot be invoked on a trait object
+     t.min().unwrap() //~ ERROR the `min` method cannot be invoked on `&dyn Iterator<Item = &u64>`
 }
 
 fn main() {
diff --git a/src/test/ui/suggestions/imm-ref-trait-object.stderr b/src/test/ui/suggestions/imm-ref-trait-object.stderr
index 02847ed8c4c..f7f7902c17d 100644
--- a/src/test/ui/suggestions/imm-ref-trait-object.stderr
+++ b/src/test/ui/suggestions/imm-ref-trait-object.stderr
@@ -1,11 +1,8 @@
-error: the `min` method cannot be invoked on a trait object
+error: the `min` method cannot be invoked on `&dyn Iterator<Item = &u64>`
   --> $DIR/imm-ref-trait-object.rs:2:8
    |
 LL |      t.min().unwrap()
    |        ^^^
-  --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
-   |
-   = note: this has a `Sized` requirement
    |
 help: you need `&mut dyn Iterator<Item = &u64>` instead of `&dyn Iterator<Item = &u64>`
    |