@@ -120,7 +120,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
120
120
. max_by_key ( |niche| niche. available ( dl) ) ;
121
121
122
122
LayoutData {
123
- variants : Variants :: Single { index : Some ( VariantIdx :: new ( 0 ) ) } ,
123
+ variants : Variants :: Single { index : VariantIdx :: new ( 0 ) } ,
124
124
fields : FieldsShape :: Arbitrary {
125
125
offsets : [ Size :: ZERO , b_offset] . into ( ) ,
126
126
memory_index : [ 0 , 1 ] . into ( ) ,
@@ -213,8 +213,9 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
213
213
& self ,
214
214
) -> LayoutData < FieldIdx , VariantIdx > {
215
215
let dl = self . cx . data_layout ( ) ;
216
+ // This is also used for uninhabited enums, so we use `Variants::Empty`.
216
217
LayoutData {
217
- variants : Variants :: Single { index : None } ,
218
+ variants : Variants :: Empty ,
218
219
fields : FieldsShape :: Primitive ,
219
220
backend_repr : BackendRepr :: Uninhabited ,
220
221
largest_niche : None ,
@@ -385,7 +386,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
385
386
} ;
386
387
387
388
Ok ( LayoutData {
388
- variants : Variants :: Single { index : Some ( only_variant_idx) } ,
389
+ variants : Variants :: Single { index : only_variant_idx } ,
389
390
fields : FieldsShape :: Union ( union_field_count) ,
390
391
backend_repr : abi,
391
392
largest_niche : None ,
@@ -424,7 +425,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
424
425
} ;
425
426
426
427
let mut st = self . univariant ( & variants[ v] , repr, kind) ?;
427
- st. variants = Variants :: Single { index : Some ( v ) } ;
428
+ st. variants = Variants :: Single { index : v } ;
428
429
429
430
if is_unsafe_cell {
430
431
let hide_niches = |scalar : & mut _ | match scalar {
@@ -543,7 +544,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
543
544
. iter_enumerated ( )
544
545
. map ( |( j, v) | {
545
546
let mut st = self . univariant ( v, repr, StructKind :: AlwaysSized ) . ok ( ) ?;
546
- st. variants = Variants :: Single { index : Some ( j ) } ;
547
+ st. variants = Variants :: Single { index : j } ;
547
548
548
549
align = align. max ( st. align ) ;
549
550
max_repr_align = max_repr_align. max ( st. max_repr_align ) ;
@@ -736,7 +737,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
736
737
repr,
737
738
StructKind :: Prefixed ( min_ity. size ( ) , prefix_align) ,
738
739
) ?;
739
- st. variants = Variants :: Single { index : Some ( i ) } ;
740
+ st. variants = Variants :: Single { index : i } ;
740
741
// Find the first field we can't move later
741
742
// to make room for a larger discriminant.
742
743
for field_idx in st. fields . index_by_increasing_offset ( ) {
@@ -1004,8 +1005,8 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
1004
1005
Variants :: Multiple { tag, tag_encoding, tag_field, .. } => {
1005
1006
Variants :: Multiple { tag, tag_encoding, tag_field, variants : best_layout. variants }
1006
1007
}
1007
- Variants :: Single { .. } => {
1008
- panic ! ( "encountered a single-variant enum during multi-variant layout" )
1008
+ Variants :: Single { .. } | Variants :: Empty => {
1009
+ panic ! ( "encountered a single-variant or empty enum during multi-variant layout" )
1009
1010
}
1010
1011
} ;
1011
1012
Ok ( best_layout. layout )
@@ -1344,7 +1345,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
1344
1345
} ;
1345
1346
1346
1347
Ok ( LayoutData {
1347
- variants : Variants :: Single { index : Some ( VariantIdx :: new ( 0 ) ) } ,
1348
+ variants : Variants :: Single { index : VariantIdx :: new ( 0 ) } ,
1348
1349
fields : FieldsShape :: Arbitrary { offsets, memory_index } ,
1349
1350
backend_repr : abi,
1350
1351
largest_niche,
0 commit comments