1- use self :: EnumDiscriminantInfo :: * ;
1+ use self :: EnumTagInfo :: * ;
22use self :: MemberDescriptionFactory :: * ;
33use self :: RecursiveTypeDescription :: * ;
44
@@ -40,7 +40,7 @@ use rustc_middle::{bug, span_bug};
4040use rustc_session:: config:: { self , DebugInfo } ;
4141use rustc_span:: symbol:: { Interner , Symbol } ;
4242use rustc_span:: { self , SourceFile , SourceFileHash , Span } ;
43- use rustc_target:: abi:: { Abi , Align , DiscriminantKind , HasDataLayout , Integer , LayoutOf } ;
43+ use rustc_target:: abi:: { Abi , Align , HasDataLayout , Integer , LayoutOf , TagEncoding } ;
4444use rustc_target:: abi:: { Int , Pointer , F32 , F64 } ;
4545use rustc_target:: abi:: { Primitive , Size , VariantIdx , Variants } ;
4646
@@ -1335,7 +1335,7 @@ fn generator_layout_and_saved_local_names(
13351335struct EnumMemberDescriptionFactory < ' ll , ' tcx > {
13361336 enum_type : Ty < ' tcx > ,
13371337 layout : TyAndLayout < ' tcx > ,
1338- discriminant_type_metadata : Option < & ' ll DIType > ,
1338+ tag_type_metadata : Option < & ' ll DIType > ,
13391339 containing_scope : & ' ll DIScope ,
13401340 span : Span ,
13411341}
@@ -1385,7 +1385,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
13851385 cx,
13861386 self . layout ,
13871387 variant_info,
1388- NoDiscriminant ,
1388+ NoTag ,
13891389 self_metadata,
13901390 self . span ,
13911391 ) ;
@@ -1409,19 +1409,19 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
14091409 } ]
14101410 }
14111411 Variants :: Multiple {
1412- discr_kind : DiscriminantKind :: Tag ,
1413- discr_index ,
1412+ tag_encoding : TagEncoding :: Direct ,
1413+ tag_field ,
14141414 ref variants,
14151415 ..
14161416 } => {
1417- let discriminant_info = if fallback {
1418- RegularDiscriminant {
1419- discr_field : Field :: from ( discr_index ) ,
1420- discr_type_metadata : self . discriminant_type_metadata . unwrap ( ) ,
1417+ let tag_info = if fallback {
1418+ RegularTag {
1419+ tag_field : Field :: from ( tag_field ) ,
1420+ tag_type_metadata : self . tag_type_metadata . unwrap ( ) ,
14211421 }
14221422 } else {
14231423 // This doesn't matter in this case.
1424- NoDiscriminant
1424+ NoTag
14251425 } ;
14261426 variants
14271427 . iter_enumerated ( )
@@ -1432,7 +1432,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
14321432 cx,
14331433 variant,
14341434 variant_info,
1435- discriminant_info ,
1435+ tag_info ,
14361436 self_metadata,
14371437 self . span ,
14381438 ) ;
@@ -1467,11 +1467,11 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
14671467 . collect ( )
14681468 }
14691469 Variants :: Multiple {
1470- discr_kind :
1471- DiscriminantKind :: Niche { ref niche_variants, niche_start, dataful_variant } ,
1472- ref discr ,
1470+ tag_encoding :
1471+ TagEncoding :: Niche { ref niche_variants, niche_start, dataful_variant } ,
1472+ ref tag ,
14731473 ref variants,
1474- discr_index ,
1474+ tag_field ,
14751475 } => {
14761476 if fallback {
14771477 let variant = self . layout . for_variant ( cx, dataful_variant) ;
@@ -1480,7 +1480,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
14801480 cx,
14811481 variant,
14821482 variant_info_for ( dataful_variant) ,
1483- OptimizedDiscriminant ,
1483+ OptimizedTag ,
14841484 self . containing_scope ,
14851485 self . span ,
14861486 ) ;
@@ -1524,8 +1524,8 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
15241524 cx,
15251525 & mut name,
15261526 self . layout ,
1527- self . layout . fields . offset ( discr_index ) ,
1528- self . layout . field ( cx, discr_index ) . size ,
1527+ self . layout . fields . offset ( tag_field ) ,
1528+ self . layout . field ( cx, tag_field ) . size ,
15291529 ) ;
15301530 variant_info_for ( * niche_variants. start ( ) ) . map_struct_name ( |variant_name| {
15311531 name. push_str ( variant_name) ;
@@ -1552,7 +1552,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
15521552 cx,
15531553 variant,
15541554 variant_info,
1555- OptimizedDiscriminant ,
1555+ OptimizedTag ,
15561556 self_metadata,
15571557 self . span ,
15581558 ) ;
@@ -1573,7 +1573,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
15731573 let value = ( i. as_u32 ( ) as u128 )
15741574 . wrapping_sub ( niche_variants. start ( ) . as_u32 ( ) as u128 )
15751575 . wrapping_add ( niche_start) ;
1576- let value = truncate ( value, discr . value . size ( cx) ) ;
1576+ let value = truncate ( value, tag . value . size ( cx) ) ;
15771577 // NOTE(eddyb) do *NOT* remove this assert, until
15781578 // we pass the full 128-bit value to LLVM, otherwise
15791579 // truncation will be silent and remain undetected.
@@ -1603,7 +1603,7 @@ struct VariantMemberDescriptionFactory<'ll, 'tcx> {
16031603 /// Cloned from the `layout::Struct` describing the variant.
16041604 offsets : Vec < Size > ,
16051605 args : Vec < ( String , Ty < ' tcx > ) > ,
1606- discriminant_type_metadata : Option < & ' ll DIType > ,
1606+ tag_type_metadata : Option < & ' ll DIType > ,
16071607 span : Span ,
16081608}
16091609
@@ -1617,7 +1617,7 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
16171617 MemberDescription {
16181618 name : name. to_string ( ) ,
16191619 type_metadata : if use_enum_fallback ( cx) {
1620- match self . discriminant_type_metadata {
1620+ match self . tag_type_metadata {
16211621 // Discriminant is always the first field of our variant
16221622 // when using the enum fallback.
16231623 Some ( metadata) if i == 0 => metadata,
@@ -1637,11 +1637,14 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
16371637 }
16381638}
16391639
1640+ // FIXME: terminology here should be aligned with `abi::TagEncoding`.
1641+ // `OptimizedTag` is `TagEncoding::Niche`, `RegularTag` is `TagEncoding::Direct`.
1642+ // `NoTag` should be removed; users should use `Option<EnumTagInfo>` instead.
16401643#[ derive( Copy , Clone ) ]
1641- enum EnumDiscriminantInfo < ' ll > {
1642- RegularDiscriminant { discr_field : Field , discr_type_metadata : & ' ll DIType } ,
1643- OptimizedDiscriminant ,
1644- NoDiscriminant ,
1644+ enum EnumTagInfo < ' ll > {
1645+ RegularTag { tag_field : Field , tag_type_metadata : & ' ll DIType } ,
1646+ OptimizedTag ,
1647+ NoTag ,
16451648}
16461649
16471650#[ derive( Copy , Clone ) ]
@@ -1706,7 +1709,7 @@ fn describe_enum_variant(
17061709 cx : & CodegenCx < ' ll , ' tcx > ,
17071710 layout : layout:: TyAndLayout < ' tcx > ,
17081711 variant : VariantInfo < ' _ , ' tcx > ,
1709- discriminant_info : EnumDiscriminantInfo < ' ll > ,
1712+ discriminant_info : EnumTagInfo < ' ll > ,
17101713 containing_scope : & ' ll DIScope ,
17111714 span : Span ,
17121715) -> ( & ' ll DICompositeType , MemberDescriptionFactory < ' ll , ' tcx > ) {
@@ -1722,12 +1725,12 @@ fn describe_enum_variant(
17221725 let ( offsets, args) = if use_enum_fallback ( cx) {
17231726 // If this is not a univariant enum, there is also the discriminant field.
17241727 let ( discr_offset, discr_arg) = match discriminant_info {
1725- RegularDiscriminant { discr_field , .. } => {
1728+ RegularTag { tag_field , .. } => {
17261729 // We have the layout of an enum variant, we need the layout of the outer enum
17271730 let enum_layout = cx. layout_of ( layout. ty ) ;
1728- let offset = enum_layout. fields . offset ( discr_field . as_usize ( ) ) ;
1731+ let offset = enum_layout. fields . offset ( tag_field . as_usize ( ) ) ;
17291732 let args =
1730- ( "RUST$ENUM$DISR" . to_owned ( ) , enum_layout. field ( cx, discr_field . as_usize ( ) ) . ty ) ;
1733+ ( "RUST$ENUM$DISR" . to_owned ( ) , enum_layout. field ( cx, tag_field . as_usize ( ) ) . ty ) ;
17311734 ( Some ( offset) , Some ( args) )
17321735 }
17331736 _ => ( None , None ) ,
@@ -1757,8 +1760,8 @@ fn describe_enum_variant(
17571760 let member_description_factory = VariantMDF ( VariantMemberDescriptionFactory {
17581761 offsets,
17591762 args,
1760- discriminant_type_metadata : match discriminant_info {
1761- RegularDiscriminant { discr_type_metadata , .. } => Some ( discr_type_metadata ) ,
1763+ tag_type_metadata : match discriminant_info {
1764+ RegularTag { tag_type_metadata , .. } => Some ( tag_type_metadata ) ,
17621765 _ => None ,
17631766 } ,
17641767 span,
@@ -1880,18 +1883,18 @@ fn prepare_enum_metadata(
18801883
18811884 if let (
18821885 & Abi :: Scalar ( _) ,
1883- & Variants :: Multiple { discr_kind : DiscriminantKind :: Tag , ref discr , .. } ,
1886+ & Variants :: Multiple { tag_encoding : TagEncoding :: Direct , ref tag , .. } ,
18841887 ) = ( & layout. abi , & layout. variants )
18851888 {
1886- return FinalMetadata ( discriminant_type_metadata ( discr . value ) ) ;
1889+ return FinalMetadata ( discriminant_type_metadata ( tag . value ) ) ;
18871890 }
18881891
18891892 if use_enum_fallback ( cx) {
18901893 let discriminant_type_metadata = match layout. variants {
18911894 Variants :: Single { .. }
1892- | Variants :: Multiple { discr_kind : DiscriminantKind :: Niche { .. } , .. } => None ,
1893- Variants :: Multiple { discr_kind : DiscriminantKind :: Tag , ref discr , .. } => {
1894- Some ( discriminant_type_metadata ( discr . value ) )
1895+ | Variants :: Multiple { tag_encoding : TagEncoding :: Niche { .. } , .. } => None ,
1896+ Variants :: Multiple { tag_encoding : TagEncoding :: Direct , ref tag , .. } => {
1897+ Some ( discriminant_type_metadata ( tag . value ) )
18951898 }
18961899 } ;
18971900
@@ -1927,7 +1930,7 @@ fn prepare_enum_metadata(
19271930 EnumMDF ( EnumMemberDescriptionFactory {
19281931 enum_type,
19291932 layout,
1930- discriminant_type_metadata,
1933+ tag_type_metadata : discriminant_type_metadata,
19311934 containing_scope,
19321935 span,
19331936 } ) ,
@@ -1943,24 +1946,21 @@ fn prepare_enum_metadata(
19431946 Variants :: Single { .. } => None ,
19441947
19451948 Variants :: Multiple {
1946- discr_kind : DiscriminantKind :: Niche { .. } ,
1947- ref discr,
1948- discr_index,
1949- ..
1949+ tag_encoding : TagEncoding :: Niche { .. } , ref tag, tag_field, ..
19501950 } => {
19511951 // Find the integer type of the correct size.
1952- let size = discr . value . size ( cx) ;
1953- let align = discr . value . align ( cx) ;
1952+ let size = tag . value . size ( cx) ;
1953+ let align = tag . value . align ( cx) ;
19541954
1955- let discr_type = match discr . value {
1955+ let tag_type = match tag . value {
19561956 Int ( t, _) => t,
19571957 F32 => Integer :: I32 ,
19581958 F64 => Integer :: I64 ,
19591959 Pointer => cx. data_layout ( ) . ptr_sized_integer ( ) ,
19601960 }
19611961 . to_ty ( cx. tcx , false ) ;
19621962
1963- let discr_metadata = basic_type_metadata ( cx, discr_type ) ;
1963+ let tag_metadata = basic_type_metadata ( cx, tag_type ) ;
19641964 unsafe {
19651965 Some ( llvm:: LLVMRustDIBuilderCreateMemberType (
19661966 DIB ( cx) ,
@@ -1971,17 +1971,15 @@ fn prepare_enum_metadata(
19711971 UNKNOWN_LINE_NUMBER ,
19721972 size. bits ( ) ,
19731973 align. abi . bits ( ) as u32 ,
1974- layout. fields . offset ( discr_index ) . bits ( ) ,
1974+ layout. fields . offset ( tag_field ) . bits ( ) ,
19751975 DIFlags :: FlagArtificial ,
1976- discr_metadata ,
1976+ tag_metadata ,
19771977 ) )
19781978 }
19791979 }
19801980
1981- Variants :: Multiple {
1982- discr_kind : DiscriminantKind :: Tag , ref discr, discr_index, ..
1983- } => {
1984- let discr_type = discr. value . to_ty ( cx. tcx ) ;
1981+ Variants :: Multiple { tag_encoding : TagEncoding :: Direct , ref tag, tag_field, .. } => {
1982+ let discr_type = tag. value . to_ty ( cx. tcx ) ;
19851983 let ( size, align) = cx. size_and_align_of ( discr_type) ;
19861984
19871985 let discr_metadata = basic_type_metadata ( cx, discr_type) ;
@@ -1995,7 +1993,7 @@ fn prepare_enum_metadata(
19951993 UNKNOWN_LINE_NUMBER ,
19961994 size. bits ( ) ,
19971995 align. bits ( ) as u32 ,
1998- layout. fields . offset ( discr_index ) . bits ( ) ,
1996+ layout. fields . offset ( tag_field ) . bits ( ) ,
19991997 DIFlags :: FlagArtificial ,
20001998 discr_metadata,
20011999 ) )
@@ -2081,7 +2079,7 @@ fn prepare_enum_metadata(
20812079 EnumMDF ( EnumMemberDescriptionFactory {
20822080 enum_type,
20832081 layout,
2084- discriminant_type_metadata : None ,
2082+ tag_type_metadata : None ,
20852083 containing_scope,
20862084 span,
20872085 } ) ,
0 commit comments