@@ -16,7 +16,8 @@ use rustc_middle::ty::adjustment::{
16
16
} ;
17
17
use rustc_middle:: ty:: fold:: TypeFoldable ;
18
18
use rustc_middle:: ty:: {
19
- self , GenericArgs , GenericArgsRef , GenericParamDefKind , Ty , TyCtxt , UserArgs , UserType ,
19
+ self , GenericArgs , GenericArgsRef , GenericParamDefKind , Ty , TyCtxt , TypeVisitableExt , UserArgs ,
20
+ UserType ,
20
21
} ;
21
22
use rustc_middle:: { bug, span_bug} ;
22
23
use rustc_span:: { Span , DUMMY_SP } ;
@@ -269,6 +270,17 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
269
270
270
271
probe:: ObjectPick => {
271
272
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
+
272
284
self . extract_existential_trait_ref ( self_ty, |this, object_ty, principal| {
273
285
// The object data has no entry for the Self
274
286
// Type. For the purposes of this method call, we
0 commit comments