Never say "Trait is implemented for {type error}"
When a trait bound error occurs, we look for alternative types that
would have made the bound succeed. For some reason `{type error}`
sometimes would appear as a type that would do so.
We now remove `{type error}` from the list in every case to avoid
nonsensical `note`s.
This commit is contained in:
@@ -1908,6 +1908,9 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
||||
ct_op: |ct| ct.normalize(self.tcx, ty::ParamEnv::empty()),
|
||||
},
|
||||
);
|
||||
if cand.references_error() {
|
||||
return false;
|
||||
}
|
||||
err.highlighted_help(vec![
|
||||
StringPart::normal(format!("the trait `{}` ", cand.print_trait_sugared())),
|
||||
StringPart::highlighted("is"),
|
||||
@@ -1932,7 +1935,8 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
||||
}
|
||||
|
||||
let other = if other { "other " } else { "" };
|
||||
let report = |candidates: Vec<TraitRef<'tcx>>, err: &mut Diag<'_>| {
|
||||
let report = |mut candidates: Vec<TraitRef<'tcx>>, err: &mut Diag<'_>| {
|
||||
candidates.retain(|tr| !tr.references_error());
|
||||
if candidates.is_empty() {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user