@@ -5,15 +5,14 @@ use rustc_data_structures::fx::FxHashSet;
5
5
use rustc_errors:: Applicability ;
6
6
use rustc_hir as hir;
7
7
use rustc_hir:: { is_range_literal, ExprKind , Node } ;
8
- use rustc_index:: vec:: Idx ;
9
8
use rustc_middle:: ty:: layout:: { IntegerExt , SizeSkeleton } ;
10
9
use rustc_middle:: ty:: subst:: SubstsRef ;
11
10
use rustc_middle:: ty:: { self , AdtKind , Ty , TyCtxt , TypeFoldable } ;
12
11
use rustc_span:: source_map;
13
12
use rustc_span:: symbol:: sym;
14
13
use rustc_span:: { Span , DUMMY_SP } ;
15
14
use rustc_target:: abi:: Abi ;
16
- use rustc_target:: abi:: { Integer , LayoutOf , TagEncoding , VariantIdx , Variants } ;
15
+ use rustc_target:: abi:: { Integer , LayoutOf , TagEncoding , Variants } ;
17
16
use rustc_target:: spec:: abi:: Abi as SpecAbi ;
18
17
19
18
use std:: cmp;
@@ -783,25 +782,14 @@ crate fn repr_nullable_ptr<'tcx>(
783
782
) -> Option < Ty < ' tcx > > {
784
783
debug ! ( "is_repr_nullable_ptr(cx, ty = {:?})" , ty) ;
785
784
if let ty:: Adt ( ty_def, substs) = ty. kind ( ) {
786
- if ty_def. variants . len ( ) != 2 {
787
- return None ;
788
- }
789
-
790
- let get_variant_fields = |index| & ty_def. variants [ VariantIdx :: new ( index) ] . fields ;
791
- let variant_fields = [ get_variant_fields ( 0 ) , get_variant_fields ( 1 ) ] ;
792
- let fields = if variant_fields[ 0 ] . is_empty ( ) {
793
- & variant_fields[ 1 ]
794
- } else if variant_fields[ 1 ] . is_empty ( ) {
795
- & variant_fields[ 0 ]
796
- } else {
797
- return None ;
785
+ let field_ty = match & ty_def. variants . raw [ ..] {
786
+ [ var_one, var_two] => match ( & var_one. fields [ ..] , & var_two. fields [ ..] ) {
787
+ ( [ ] , [ field] ) | ( [ field] , [ ] ) => field. ty ( cx. tcx , substs) ,
788
+ _ => return None ,
789
+ } ,
790
+ _ => return None ,
798
791
} ;
799
792
800
- if fields. len ( ) != 1 {
801
- return None ;
802
- }
803
-
804
- let field_ty = fields[ 0 ] . ty ( cx. tcx , substs) ;
805
793
if !ty_is_known_nonnull ( cx, field_ty, ckind) {
806
794
return None ;
807
795
}
0 commit comments