@@ -1065,11 +1065,9 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
10651065 for ( predicate, _parent_pred, _cause) in unsatisfied_predicates {
10661066 if let ty:: PredicateKind :: Clause ( ty:: ClauseKind :: Trait ( pred) ) =
10671067 predicate. kind ( ) . skip_binder ( )
1068+ && let self_ty = pred. trait_ref . self_ty ( )
1069+ && self_ty. peel_refs ( ) == rcvr_ty
10681070 {
1069- let self_ty = pred. trait_ref . self_ty ( ) ;
1070- if self_ty. peel_refs ( ) != rcvr_ty {
1071- continue ;
1072- }
10731071 let is_ref = matches ! ( self_ty. kind( ) , ty:: Ref ( ..) ) ;
10741072 tracker. track ( pred. trait_ref . def_id , is_ref) ;
10751073 }
@@ -1102,19 +1100,18 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
11021100 let is_ty_span = Some ( span) == ty_span;
11031101 if is_ty_span && should_condense {
11041102 ty_span. take ( ) ;
1105- err. span_label (
1106- span,
1103+ let label = if let Some ( missing_trait_list) = & missing_trait_list {
1104+ format ! (
1105+ "{item_kind} `{item_ident}` not found for this {} because `{rcvr_ty_str}` doesn't implement {missing_trait_list}" ,
1106+ rcvr_ty. prefix_string( self . tcx)
1107+ )
1108+ } else {
11071109 format ! (
11081110 "{item_kind} `{item_ident}` not found for this {}" ,
11091111 rcvr_ty. prefix_string( self . tcx)
1110- ) ,
1111- ) ;
1112- if let Some ( missing_trait_list) = & missing_trait_list {
1113- err. span_label (
1114- span,
1115- format ! ( "`{rcvr_ty_str}` doesn't implement {missing_trait_list}" ) ,
1116- ) ;
1117- }
1112+ )
1113+ } ;
1114+ err. span_label ( span, label) ;
11181115 continue ;
11191116 }
11201117 let pre = if is_ty_span {
0 commit comments