@@ -120,7 +120,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
120120 . max_by_key ( |niche| niche. available ( dl) ) ;
121121
122122 LayoutData {
123- variants : Variants :: Single { index : Some ( VariantIdx :: new ( 0 ) ) } ,
123+ variants : Variants :: Single { index : VariantIdx :: new ( 0 ) } ,
124124 fields : FieldsShape :: Arbitrary {
125125 offsets : [ Size :: ZERO , b_offset] . into ( ) ,
126126 memory_index : [ 0 , 1 ] . into ( ) ,
@@ -213,8 +213,9 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
213213 & self ,
214214 ) -> LayoutData < FieldIdx , VariantIdx > {
215215 let dl = self . cx . data_layout ( ) ;
216+ // This is also used for uninhabited enums, so we use `Variants::Empty`.
216217 LayoutData {
217- variants : Variants :: Single { index : None } ,
218+ variants : Variants :: Empty ,
218219 fields : FieldsShape :: Primitive ,
219220 backend_repr : BackendRepr :: Uninhabited ,
220221 largest_niche : None ,
@@ -385,7 +386,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
385386 } ;
386387
387388 Ok ( LayoutData {
388- variants : Variants :: Single { index : Some ( only_variant_idx) } ,
389+ variants : Variants :: Single { index : only_variant_idx } ,
389390 fields : FieldsShape :: Union ( union_field_count) ,
390391 backend_repr : abi,
391392 largest_niche : None ,
@@ -424,7 +425,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
424425 } ;
425426
426427 let mut st = self . univariant ( & variants[ v] , repr, kind) ?;
427- st. variants = Variants :: Single { index : Some ( v ) } ;
428+ st. variants = Variants :: Single { index : v } ;
428429
429430 if is_unsafe_cell {
430431 let hide_niches = |scalar : & mut _ | match scalar {
@@ -543,7 +544,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
543544 . iter_enumerated ( )
544545 . map ( |( j, v) | {
545546 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 } ;
547548
548549 align = align. max ( st. align ) ;
549550 max_repr_align = max_repr_align. max ( st. max_repr_align ) ;
@@ -736,7 +737,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
736737 repr,
737738 StructKind :: Prefixed ( min_ity. size ( ) , prefix_align) ,
738739 ) ?;
739- st. variants = Variants :: Single { index : Some ( i ) } ;
740+ st. variants = Variants :: Single { index : i } ;
740741 // Find the first field we can't move later
741742 // to make room for a larger discriminant.
742743 for field_idx in st. fields . index_by_increasing_offset ( ) {
@@ -1004,8 +1005,8 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
10041005 Variants :: Multiple { tag, tag_encoding, tag_field, .. } => {
10051006 Variants :: Multiple { tag, tag_encoding, tag_field, variants : best_layout. variants }
10061007 }
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" )
10091010 }
10101011 } ;
10111012 Ok ( best_layout. layout )
@@ -1344,7 +1345,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
13441345 } ;
13451346
13461347 Ok ( LayoutData {
1347- variants : Variants :: Single { index : Some ( VariantIdx :: new ( 0 ) ) } ,
1348+ variants : Variants :: Single { index : VariantIdx :: new ( 0 ) } ,
13481349 fields : FieldsShape :: Arbitrary { offsets, memory_index } ,
13491350 backend_repr : abi,
13501351 largest_niche,
0 commit comments