@@ -5,15 +5,14 @@ use rustc_data_structures::fx::FxHashSet;
55use rustc_errors:: Applicability ;
66use rustc_hir as hir;
77use rustc_hir:: { is_range_literal, ExprKind , Node } ;
8- use rustc_index:: vec:: Idx ;
98use rustc_middle:: ty:: layout:: { IntegerExt , SizeSkeleton } ;
109use rustc_middle:: ty:: subst:: SubstsRef ;
1110use rustc_middle:: ty:: { self , AdtKind , Ty , TyCtxt , TypeFoldable } ;
1211use rustc_span:: source_map;
1312use rustc_span:: symbol:: sym;
1413use rustc_span:: { Span , DUMMY_SP } ;
1514use rustc_target:: abi:: Abi ;
16- use rustc_target:: abi:: { Integer , LayoutOf , TagEncoding , VariantIdx , Variants } ;
15+ use rustc_target:: abi:: { Integer , LayoutOf , TagEncoding , Variants } ;
1716use rustc_target:: spec:: abi:: Abi as SpecAbi ;
1817
1918use std:: cmp;
@@ -783,25 +782,14 @@ crate fn repr_nullable_ptr<'tcx>(
783782) -> Option < Ty < ' tcx > > {
784783 debug ! ( "is_repr_nullable_ptr(cx, ty = {:?})" , ty) ;
785784 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 ,
798791 } ;
799792
800- if fields. len ( ) != 1 {
801- return None ;
802- }
803-
804- let field_ty = fields[ 0 ] . ty ( cx. tcx , substs) ;
805793 if !ty_is_known_nonnull ( cx, field_ty, ckind) {
806794 return None ;
807795 }
0 commit comments