@@ -416,7 +416,6 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> {
416
416
}
417
417
418
418
PatKind :: Slice ( ref prefix, ref slice, ref suffix) => {
419
- let ty = self . tables . node_id_to_type ( pat. hir_id ) ;
420
419
match ty. sty {
421
420
ty:: TyRef ( _, ty, _) =>
422
421
PatternKind :: Deref {
@@ -427,11 +426,12 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> {
427
426
pat. span , ty, prefix, slice, suffix) )
428
427
} ,
429
428
} ,
430
-
431
429
ty:: TySlice ( ..) |
432
430
ty:: TyArray ( ..) =>
433
431
self . slice_or_array_pattern ( pat. span , ty, prefix, slice, suffix) ,
434
-
432
+ ty:: TyError => { // Avoid ICE
433
+ return Pattern { span : pat. span , ty, kind : Box :: new ( PatternKind :: Wild ) } ;
434
+ }
435
435
ref sty =>
436
436
span_bug ! (
437
437
pat. span,
@@ -441,7 +441,6 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> {
441
441
}
442
442
443
443
PatKind :: Tuple ( ref subpatterns, ddpos) => {
444
- let ty = self . tables . node_id_to_type ( pat. hir_id ) ;
445
444
match ty. sty {
446
445
ty:: TyTuple ( ref tys) => {
447
446
let subpatterns =
@@ -455,7 +454,9 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> {
455
454
456
455
PatternKind :: Leaf { subpatterns : subpatterns }
457
456
}
458
-
457
+ ty:: TyError => { // Avoid ICE (#50577)
458
+ return Pattern { span : pat. span , ty, kind : Box :: new ( PatternKind :: Wild ) } ;
459
+ }
459
460
ref sty => span_bug ! ( pat. span, "unexpected type for tuple pattern: {:?}" , sty) ,
460
461
}
461
462
}
@@ -464,6 +465,9 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> {
464
465
let var_ty = self . tables . node_id_to_type ( pat. hir_id ) ;
465
466
let region = match var_ty. sty {
466
467
ty:: TyRef ( r, _, _) => Some ( r) ,
468
+ ty:: TyError => { // Avoid ICE
469
+ return Pattern { span : pat. span , ty, kind : Box :: new ( PatternKind :: Wild ) } ;
470
+ }
467
471
_ => None ,
468
472
} ;
469
473
let bm = * self . tables . pat_binding_modes ( ) . get ( pat. hir_id )
@@ -505,12 +509,8 @@ impl<'a, 'tcx> PatternContext<'a, 'tcx> {
505
509
let def = self . tables . qpath_def ( qpath, pat. hir_id ) ;
506
510
let adt_def = match ty. sty {
507
511
ty:: TyAdt ( adt_def, _) => adt_def,
508
- ty:: TyError => { // Avoid ICE (#50585)
509
- return Pattern {
510
- span : pat. span ,
511
- ty,
512
- kind : Box :: new ( PatternKind :: Wild ) ,
513
- } ;
512
+ ty:: TyError => { // Avoid ICE (#50585)
513
+ return Pattern { span : pat. span , ty, kind : Box :: new ( PatternKind :: Wild ) } ;
514
514
}
515
515
_ => span_bug ! ( pat. span,
516
516
"tuple struct pattern not applied to an ADT {:?}" ,
0 commit comments