Skip to content

Commit

Permalink
Rollup merge of #112057 - MU001999:fix/self-sugg, r=compiler-errors
Browse files Browse the repository at this point in the history
Suggest correct `self_ty`

Fixes #112036
  • Loading branch information
matthiaskrgr committed May 29, 2023
2 parents ef9a681 + 2f65aac commit 880da38
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 2 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_hir_analysis/src/check/compare_impl_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -902,7 +902,7 @@ fn report_trait_method_mismatch<'tcx>(
if trait_m.fn_has_self_parameter =>
{
let ty = trait_sig.inputs()[0];
let sugg = match ExplicitSelf::determine(ty, |_| ty == impl_trait_ref.self_ty()) {
let sugg = match ExplicitSelf::determine(ty, |ty| ty == impl_trait_ref.self_ty()) {
ExplicitSelf::ByValue => "self".to_owned(),
ExplicitSelf::ByReference(_, hir::Mutability::Not) => "&self".to_owned(),
ExplicitSelf::ByReference(_, hir::Mutability::Mut) => "&mut self".to_owned(),
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/mismatched_types/E0053.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ LL | fn bar(&mut self) { }
| ^^^^^^^^^
| |
| types differ in mutability
| help: change the self-receiver type to match the trait: `self: &Bar`
| help: change the self-receiver type to match the trait: `&self`
|
note: type in trait
--> $DIR/E0053.rs:3:12
Expand Down
7 changes: 7 additions & 0 deletions tests/ui/mismatched_types/issue-112036.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
struct Foo;

impl Drop for Foo {
fn drop(self) {} //~ ERROR method `drop` has an incompatible type for trait
}

fn main() {}
15 changes: 15 additions & 0 deletions tests/ui/mismatched_types/issue-112036.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
error[E0053]: method `drop` has an incompatible type for trait
--> $DIR/issue-112036.rs:4:13
|
LL | fn drop(self) {}
| ^^^^
| |
| expected `&mut Foo`, found `Foo`
| help: change the self-receiver type to match the trait: `&mut self`
|
= note: expected signature `fn(&mut Foo)`
found signature `fn(Foo)`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0053`.

0 comments on commit 880da38

Please sign in to comment.