@@ -16,7 +16,8 @@ use rustc_middle::ty::adjustment::{
1616} ;
1717use rustc_middle:: ty:: fold:: TypeFoldable ;
1818use rustc_middle:: ty:: {
19- self , GenericArgs , GenericArgsRef , GenericParamDefKind , Ty , TyCtxt , UserArgs , UserType ,
19+ self , GenericArgs , GenericArgsRef , GenericParamDefKind , Ty , TyCtxt , TypeVisitableExt , UserArgs ,
20+ UserType ,
2021} ;
2122use rustc_middle:: { bug, span_bug} ;
2223use rustc_span:: { Span , DUMMY_SP } ;
@@ -269,6 +270,17 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
269270
270271 probe:: ObjectPick => {
271272 let trait_def_id = pick. item . container_id ( self . tcx ) ;
273+
274+ // This shouldn't happen for non-region error kinds, but may occur
275+ // when we have error regions. Specifically, since we canonicalize
276+ // during method steps, we may successfully deref when we assemble
277+ // the pick, but fail to deref when we try to extract the object
278+ // type from the pick during confirmation. This is fine, we're basically
279+ // already doomed by this point.
280+ if self_ty. references_error ( ) {
281+ return ty:: GenericArgs :: extend_with_error ( self . tcx , trait_def_id, & [ ] ) ;
282+ }
283+
272284 self . extract_existential_trait_ref ( self_ty, |this, object_ty, principal| {
273285 // The object data has no entry for the Self
274286 // Type. For the purposes of this method call, we
0 commit comments