@@ -371,23 +371,28 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
371371
372372 if !candidate_set. ambiguous && no_candidates_apply {
373373 let trait_ref = stack. obligation . predicate . skip_binder ( ) . trait_ref ;
374- let self_ty = trait_ref. self_ty ( ) ;
375- let ( trait_desc, self_desc) = with_no_trimmed_paths ! ( {
376- let trait_desc = trait_ref. print_only_trait_path( ) . to_string( ) ;
377- let self_desc = if self_ty. has_concrete_skeleton( ) {
378- Some ( self_ty. to_string( ) )
374+ if !trait_ref. references_error ( ) {
375+ let self_ty = trait_ref. self_ty ( ) ;
376+ let ( trait_desc, self_desc) = with_no_trimmed_paths ! ( {
377+ let trait_desc = trait_ref. print_only_trait_path( ) . to_string( ) ;
378+ let self_desc = if self_ty. has_concrete_skeleton( ) {
379+ Some ( self_ty. to_string( ) )
380+ } else {
381+ None
382+ } ;
383+ ( trait_desc, self_desc)
384+ } ) ;
385+ let cause = if let Conflict :: Upstream = conflict {
386+ IntercrateAmbiguityCause :: UpstreamCrateUpdate {
387+ trait_desc,
388+ self_desc,
389+ }
379390 } else {
380- None
391+ IntercrateAmbiguityCause :: DownstreamCrate { trait_desc , self_desc }
381392 } ;
382- ( trait_desc, self_desc)
383- } ) ;
384- let cause = if let Conflict :: Upstream = conflict {
385- IntercrateAmbiguityCause :: UpstreamCrateUpdate { trait_desc, self_desc }
386- } else {
387- IntercrateAmbiguityCause :: DownstreamCrate { trait_desc, self_desc }
388- } ;
389- debug ! ( ?cause, "evaluate_stack: pushing cause" ) ;
390- self . intercrate_ambiguity_causes . as_mut ( ) . unwrap ( ) . insert ( cause) ;
393+ debug ! ( ?cause, "evaluate_stack: pushing cause" ) ;
394+ self . intercrate_ambiguity_causes . as_mut ( ) . unwrap ( ) . insert ( cause) ;
395+ }
391396 }
392397 }
393398 }
0 commit comments