@@ -913,11 +913,13 @@ impl<'a, 'tcx> LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> {
913
913
}
914
914
915
915
return Ok ( tcx. intern_layout ( LayoutDetails {
916
- variants : Variants :: NicheFilling {
917
- dataful_variant : i,
918
- niche_variants,
919
- niche : niche_scalar,
920
- niche_start,
916
+ variants : Variants :: Multiple {
917
+ discr : niche_scalar,
918
+ discr_kind : DiscriminantKind :: Niche {
919
+ dataful_variant : i,
920
+ niche_variants,
921
+ niche_start,
922
+ } ,
921
923
variants : st,
922
924
} ,
923
925
fields : FieldPlacement :: Arbitrary {
@@ -1137,8 +1139,9 @@ impl<'a, 'tcx> LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> {
1137
1139
}
1138
1140
1139
1141
tcx. intern_layout ( LayoutDetails {
1140
- variants : Variants :: Tagged {
1141
- tag,
1142
+ variants : Variants :: Multiple {
1143
+ discr : tag,
1144
+ discr_kind : DiscriminantKind :: Tag ,
1142
1145
variants : layout_variants,
1143
1146
} ,
1144
1147
fields : FieldPlacement :: Arbitrary {
@@ -1293,8 +1296,7 @@ impl<'a, 'tcx> LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> {
1293
1296
}
1294
1297
}
1295
1298
1296
- Variants :: NicheFilling { .. } |
1297
- Variants :: Tagged { .. } => {
1299
+ Variants :: Multiple { ref discr, ref discr_kind, .. } => {
1298
1300
debug ! ( "print-type-size `{:#?}` adt general variants def {}" ,
1299
1301
layout. ty, adt_def. variants. len( ) ) ;
1300
1302
let variant_infos: Vec < _ > =
@@ -1306,8 +1308,8 @@ impl<'a, 'tcx> LayoutCx<'tcx, TyCtxt<'a, 'tcx, 'tcx>> {
1306
1308
layout. for_variant ( self , i) )
1307
1309
} )
1308
1310
. collect ( ) ;
1309
- record ( adt_kind. into ( ) , adt_packed, match layout . variants {
1310
- Variants :: Tagged { ref tag , .. } => Some ( tag . value . size ( self ) ) ,
1311
+ record ( adt_kind. into ( ) , adt_packed, match discr_kind {
1312
+ DiscriminantKind :: Tag => Some ( discr . value . size ( self ) ) ,
1311
1313
_ => None
1312
1314
} , variant_infos) ;
1313
1315
}
@@ -1627,8 +1629,7 @@ impl<'a, 'tcx, C> TyLayoutMethods<'tcx, C> for Ty<'tcx>
1627
1629
} )
1628
1630
}
1629
1631
1630
- Variants :: NicheFilling { ref variants, .. } |
1631
- Variants :: Tagged { ref variants, .. } => {
1632
+ Variants :: Multiple { ref variants, .. } => {
1632
1633
& variants[ variant_index]
1633
1634
}
1634
1635
} ;
@@ -1735,8 +1736,7 @@ impl<'a, 'tcx, C> TyLayoutMethods<'tcx, C> for Ty<'tcx>
1735
1736
}
1736
1737
1737
1738
// Discriminant field for enums (where applicable).
1738
- Variants :: Tagged { tag : ref discr, .. } |
1739
- Variants :: NicheFilling { niche : ref discr, .. } => {
1739
+ Variants :: Multiple { ref discr, .. } => {
1740
1740
assert_eq ! ( i, 0 ) ;
1741
1741
let layout = LayoutDetails :: scalar ( cx, discr. clone ( ) ) ;
1742
1742
return MaybeResult :: from_ok ( TyLayout {
@@ -1881,26 +1881,37 @@ impl<'a> HashStable<StableHashingContext<'a>> for Variants {
1881
1881
Single { index } => {
1882
1882
index. hash_stable ( hcx, hasher) ;
1883
1883
}
1884
- Tagged {
1885
- ref tag,
1884
+ Multiple {
1885
+ ref discr,
1886
+ ref discr_kind,
1886
1887
ref variants,
1887
1888
} => {
1888
- tag. hash_stable ( hcx, hasher) ;
1889
+ discr. hash_stable ( hcx, hasher) ;
1890
+ discr_kind. hash_stable ( hcx, hasher) ;
1889
1891
variants. hash_stable ( hcx, hasher) ;
1890
1892
}
1891
- NicheFilling {
1893
+ }
1894
+ }
1895
+ }
1896
+
1897
+ impl < ' a > HashStable < StableHashingContext < ' a > > for DiscriminantKind {
1898
+ fn hash_stable < W : StableHasherResult > ( & self ,
1899
+ hcx : & mut StableHashingContext < ' a > ,
1900
+ hasher : & mut StableHasher < W > ) {
1901
+ use crate :: ty:: layout:: DiscriminantKind :: * ;
1902
+ mem:: discriminant ( self ) . hash_stable ( hcx, hasher) ;
1903
+
1904
+ match * self {
1905
+ Tag => { }
1906
+ Niche {
1892
1907
dataful_variant,
1893
1908
ref niche_variants,
1894
- ref niche,
1895
1909
niche_start,
1896
- ref variants,
1897
1910
} => {
1898
1911
dataful_variant. hash_stable ( hcx, hasher) ;
1899
1912
niche_variants. start ( ) . hash_stable ( hcx, hasher) ;
1900
1913
niche_variants. end ( ) . hash_stable ( hcx, hasher) ;
1901
- niche. hash_stable ( hcx, hasher) ;
1902
1914
niche_start. hash_stable ( hcx, hasher) ;
1903
- variants. hash_stable ( hcx, hasher) ;
1904
1915
}
1905
1916
}
1906
1917
}
0 commit comments