@@ -499,7 +499,7 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
499499 let scalar_unit = |value : Primitive | {
500500 let bits = value. size ( dl) . bits ( ) ;
501501 assert ! ( bits <= 128 ) ;
502- Scalar { value, valid_range : 0 ..= ( !0 >> ( 128 - bits) ) }
502+ Scalar { value, valid_range : AllocationRange { start : 0 , end : ( !0 >> ( 128 - bits) ) } }
503503 } ;
504504 let scalar = |value : Primitive | tcx. intern_layout ( Layout :: scalar ( self , scalar_unit ( value) ) ) ;
505505
@@ -512,11 +512,14 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
512512 // Basic scalars.
513513 ty:: Bool => tcx. intern_layout ( Layout :: scalar (
514514 self ,
515- Scalar { value : Int ( I8 , false ) , valid_range : 0 ..= 1 } ,
515+ Scalar { value : Int ( I8 , false ) , valid_range : AllocationRange { start : 0 , end : 1 } } ,
516516 ) ) ,
517517 ty:: Char => tcx. intern_layout ( Layout :: scalar (
518518 self ,
519- Scalar { value : Int ( I32 , false ) , valid_range : 0 ..=0x10FFFF } ,
519+ Scalar {
520+ value : Int ( I32 , false ) ,
521+ valid_range : AllocationRange { start : 0 , end : 0x10FFFF } ,
522+ } ,
520523 ) ) ,
521524 ty:: Int ( ity) => scalar ( Int ( Integer :: from_int_ty ( dl, ity) , true ) ) ,
522525 ty:: Uint ( ity) => scalar ( Int ( Integer :: from_uint_ty ( dl, ity) , false ) ) ,
@@ -526,7 +529,7 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
526529 } ) ,
527530 ty:: FnPtr ( _) => {
528531 let mut ptr = scalar_unit ( Pointer ) ;
529- ptr. valid_range = 1 ..= * ptr. valid_range . end ( ) ;
532+ ptr. valid_range = AllocationRange { start : 1 , end : ptr. valid_range . end } ;
530533 tcx. intern_layout ( Layout :: scalar ( self , ptr) )
531534 }
532535
@@ -544,7 +547,8 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
544547 ty:: Ref ( _, pointee, _) | ty:: RawPtr ( ty:: TypeAndMut { ty : pointee, .. } ) => {
545548 let mut data_ptr = scalar_unit ( Pointer ) ;
546549 if !ty. is_unsafe_ptr ( ) {
547- data_ptr. valid_range = 1 ..=* data_ptr. valid_range . end ( ) ;
550+ data_ptr. valid_range =
551+ AllocationRange { start : 1 , end : data_ptr. valid_range . end } ;
548552 }
549553
550554 let pointee = tcx. normalize_erasing_regions ( param_env, pointee) ;
@@ -560,7 +564,8 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
560564 ty:: Slice ( _) | ty:: Str => scalar_unit ( Int ( dl. ptr_sized_integer ( ) , false ) ) ,
561565 ty:: Dynamic ( ..) => {
562566 let mut vtable = scalar_unit ( Pointer ) ;
563- vtable. valid_range = 1 ..=* vtable. valid_range . end ( ) ;
567+ vtable. valid_range =
568+ AllocationRange { start : 1 , end : vtable. valid_range . end } ;
564569 vtable
565570 }
566571 _ => return Err ( LayoutError :: Unknown ( unsized_part) ) ,
@@ -933,14 +938,18 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
933938 if let Bound :: Included ( start) = start {
934939 // FIXME(eddyb) this might be incorrect - it doesn't
935940 // account for wrap-around (end < start) ranges.
936- assert ! ( * scalar. valid_range. start( ) <= start) ;
937- scalar. valid_range = start..=* scalar. valid_range . end ( ) ;
941+ assert ! ( scalar. valid_range. start <= start) ;
942+ // scalar.valid_range =
943+ // AllocationRange { start, end: scalar.valid_range.end };
944+ scalar. valid_range . start = start;
938945 }
939946 if let Bound :: Included ( end) = end {
940947 // FIXME(eddyb) this might be incorrect - it doesn't
941948 // account for wrap-around (end < start) ranges.
942- assert ! ( * scalar. valid_range. end( ) >= end) ;
943- scalar. valid_range = * scalar. valid_range . start ( ) ..=end;
949+ assert ! ( scalar. valid_range. end >= end) ;
950+ // scalar.valid_range =
951+ // AllocationRange { start: scalar.valid_range.start, end };
952+ scalar. valid_range . end = end;
944953 }
945954
946955 // Update `largest_niche` if we have introduced a larger niche.
@@ -1256,7 +1265,10 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
12561265 let tag_mask = !0u128 >> ( 128 - ity. size ( ) . bits ( ) ) ;
12571266 let tag = Scalar {
12581267 value : Int ( ity, signed) ,
1259- valid_range : ( min as u128 & tag_mask) ..=( max as u128 & tag_mask) ,
1268+ valid_range : AllocationRange {
1269+ start : ( min as u128 & tag_mask) ,
1270+ end : ( max as u128 & tag_mask) ,
1271+ } ,
12601272 } ;
12611273 let mut abi = Abi :: Aggregate { sized : true } ;
12621274 if tag. value . size ( dl) == size {
@@ -1535,7 +1547,10 @@ impl<'tcx> LayoutCx<'tcx, TyCtxt<'tcx>> {
15351547 let max_discr = ( info. variant_fields . len ( ) - 1 ) as u128 ;
15361548 let discr_int = Integer :: fit_unsigned ( max_discr) ;
15371549 let discr_int_ty = discr_int. to_ty ( tcx, false ) ;
1538- let tag = Scalar { value : Primitive :: Int ( discr_int, false ) , valid_range : 0 ..=max_discr } ;
1550+ let tag = Scalar {
1551+ value : Primitive :: Int ( discr_int, false ) ,
1552+ valid_range : AllocationRange { start : 0 , end : max_discr } ,
1553+ } ;
15391554 let tag_layout = self . tcx . intern_layout ( Layout :: scalar ( self , tag. clone ( ) ) ) ;
15401555 let tag_layout = TyAndLayout { ty : discr_int_ty, layout : tag_layout } ;
15411556
@@ -2846,8 +2861,8 @@ where
28462861 return ;
28472862 }
28482863
2849- if scalar. valid_range . start ( ) < scalar. valid_range . end ( ) {
2850- if * scalar. valid_range . start ( ) > 0 {
2864+ if scalar. valid_range . start < scalar. valid_range . end {
2865+ if scalar. valid_range . start > 0 {
28512866 attrs. set ( ArgAttribute :: NonNull ) ;
28522867 }
28532868 }
0 commit comments