Skip to content

Commit

Permalink
Rollup merge of rust-lang#52702 - csmoe:mut_diff, r=estebank
Browse files Browse the repository at this point in the history
Suggest fix when encountering different mutability from impl to trait

Closes rust-lang#52412
r? @estebank
  • Loading branch information
Mark-Simulacrum committed Jul 27, 2018
2 parents f869652 + d5347ff commit 15bc3ef
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/librustc_typeck/check/compare_method.rs
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,17 @@ fn compare_predicate_entailment<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
E0053,
"method `{}` has an incompatible type for trait",
trait_m.ident);
if let TypeError::Mutability = terr {
if let Some(trait_err_span) = trait_err_span {
if let Ok(trait_err_str) = tcx.sess.codemap().span_to_snippet(trait_err_span) {
diag.span_suggestion(
impl_err_span,
"consider change the type to match the mutability in trait",
format!("{}", trait_err_str),
);
}
}
}

infcx.note_type_err(&mut diag,
&cause,
Expand Down
4 changes: 4 additions & 0 deletions src/test/ui/issue-13033.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ LL | fn bar(&mut self, other: &Foo) {}
|
= note: expected type `fn(&mut Baz, &mut dyn Foo)`
found type `fn(&mut Baz, &dyn Foo)`
help: consider change the type to match the mutability in trait
|
LL | fn bar(&mut self, other: &mut Foo) {}
| ^^^^^^^^

error: aborting due to previous error

Expand Down
4 changes: 4 additions & 0 deletions src/test/ui/mismatched_types/E0053.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ LL | fn bar(&mut self) { }
|
= note: expected type `fn(&Bar)`
found type `fn(&mut Bar)`
help: consider change the type to match the mutability in trait
|
LL | fn bar(&self) { }
| ^^^^^

error: aborting due to 2 previous errors

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ LL | fn bar(&mut self, bar: &Bar) { } //~ ERROR incompatible type
|
= note: expected type `fn(&mut Bar, &mut Bar)`
found type `fn(&mut Bar, &Bar)`
help: consider change the type to match the mutability in trait
|
LL | fn bar(&mut self, bar: &mut Bar) { } //~ ERROR incompatible type
| ^^^^^^^^

error: aborting due to 2 previous errors

Expand Down

0 comments on commit 15bc3ef

Please sign in to comment.