@@ -1317,7 +1317,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
1317
1317
let actual_prefix = rcvr_ty. prefix_string ( self . tcx ) ;
1318
1318
info ! ( "unimplemented_traits.len() == {}" , unimplemented_traits. len( ) ) ;
1319
1319
let mut long_ty_file = None ;
1320
- let ( primary_message, label) = if unimplemented_traits. len ( ) == 1
1320
+ let ( primary_message, label, notes ) = if unimplemented_traits. len ( ) == 1
1321
1321
&& unimplemented_traits_only
1322
1322
{
1323
1323
unimplemented_traits
@@ -1327,16 +1327,16 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
1327
1327
if trait_ref. self_ty ( ) . references_error ( ) || rcvr_ty. references_error ( )
1328
1328
{
1329
1329
// Avoid crashing.
1330
- return ( None , None ) ;
1330
+ return ( None , None , Vec :: new ( ) ) ;
1331
1331
}
1332
- let OnUnimplementedNote { message, label, .. } = self
1332
+ let OnUnimplementedNote { message, label, notes , .. } = self
1333
1333
. err_ctxt ( )
1334
1334
. on_unimplemented_note ( trait_ref, & obligation, & mut long_ty_file) ;
1335
- ( message, label)
1335
+ ( message, label, notes )
1336
1336
} )
1337
1337
. unwrap ( )
1338
1338
} else {
1339
- ( None , None )
1339
+ ( None , None , Vec :: new ( ) )
1340
1340
} ;
1341
1341
let primary_message = primary_message. unwrap_or_else ( || {
1342
1342
format ! (
@@ -1363,6 +1363,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
1363
1363
"the following trait bounds were not satisfied:\n {bound_list}"
1364
1364
) ) ;
1365
1365
}
1366
+ if !notes. is_empty ( ) {
1367
+ notes. iter ( ) . for_each ( |note| {
1368
+ err. span_note ( span, note. to_string ( ) ) ;
1369
+ } ) ;
1370
+ }
1371
+
1366
1372
suggested_derive = self . suggest_derive ( & mut err, unsatisfied_predicates) ;
1367
1373
1368
1374
unsatisfied_bounds = true ;
0 commit comments