1
- use self :: EnumDiscriminantInfo :: * ;
1
+ use self :: EnumTagInfo :: * ;
2
2
use self :: MemberDescriptionFactory :: * ;
3
3
use self :: RecursiveTypeDescription :: * ;
4
4
@@ -40,7 +40,7 @@ use rustc_middle::{bug, span_bug};
40
40
use rustc_session:: config:: { self , DebugInfo } ;
41
41
use rustc_span:: symbol:: { Interner , Symbol } ;
42
42
use 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 } ;
44
44
use rustc_target:: abi:: { Int , Pointer , F32 , F64 } ;
45
45
use rustc_target:: abi:: { Primitive , Size , VariantIdx , Variants } ;
46
46
@@ -1335,7 +1335,7 @@ fn generator_layout_and_saved_local_names(
1335
1335
struct EnumMemberDescriptionFactory < ' ll , ' tcx > {
1336
1336
enum_type : Ty < ' tcx > ,
1337
1337
layout : TyAndLayout < ' tcx > ,
1338
- discriminant_type_metadata : Option < & ' ll DIType > ,
1338
+ tag_type_metadata : Option < & ' ll DIType > ,
1339
1339
containing_scope : & ' ll DIScope ,
1340
1340
span : Span ,
1341
1341
}
@@ -1385,7 +1385,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1385
1385
cx,
1386
1386
self . layout ,
1387
1387
variant_info,
1388
- NoDiscriminant ,
1388
+ NoTag ,
1389
1389
self_metadata,
1390
1390
self . span ,
1391
1391
) ;
@@ -1409,19 +1409,19 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1409
1409
} ]
1410
1410
}
1411
1411
Variants :: Multiple {
1412
- discr_kind : DiscriminantKind :: Tag ,
1413
- discr_index ,
1412
+ tag_encoding : TagEncoding :: Direct ,
1413
+ tag_field ,
1414
1414
ref variants,
1415
1415
..
1416
1416
} => {
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 ( ) ,
1421
1421
}
1422
1422
} else {
1423
1423
// This doesn't matter in this case.
1424
- NoDiscriminant
1424
+ NoTag
1425
1425
} ;
1426
1426
variants
1427
1427
. iter_enumerated ( )
@@ -1432,7 +1432,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1432
1432
cx,
1433
1433
variant,
1434
1434
variant_info,
1435
- discriminant_info ,
1435
+ tag_info ,
1436
1436
self_metadata,
1437
1437
self . span ,
1438
1438
) ;
@@ -1467,11 +1467,11 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1467
1467
. collect ( )
1468
1468
}
1469
1469
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 ,
1473
1473
ref variants,
1474
- discr_index ,
1474
+ tag_field ,
1475
1475
} => {
1476
1476
if fallback {
1477
1477
let variant = self . layout . for_variant ( cx, dataful_variant) ;
@@ -1480,7 +1480,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1480
1480
cx,
1481
1481
variant,
1482
1482
variant_info_for ( dataful_variant) ,
1483
- OptimizedDiscriminant ,
1483
+ OptimizedTag ,
1484
1484
self . containing_scope ,
1485
1485
self . span ,
1486
1486
) ;
@@ -1524,8 +1524,8 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1524
1524
cx,
1525
1525
& mut name,
1526
1526
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 ,
1529
1529
) ;
1530
1530
variant_info_for ( * niche_variants. start ( ) ) . map_struct_name ( |variant_name| {
1531
1531
name. push_str ( variant_name) ;
@@ -1552,7 +1552,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1552
1552
cx,
1553
1553
variant,
1554
1554
variant_info,
1555
- OptimizedDiscriminant ,
1555
+ OptimizedTag ,
1556
1556
self_metadata,
1557
1557
self . span ,
1558
1558
) ;
@@ -1573,7 +1573,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1573
1573
let value = ( i. as_u32 ( ) as u128 )
1574
1574
. wrapping_sub ( niche_variants. start ( ) . as_u32 ( ) as u128 )
1575
1575
. wrapping_add ( niche_start) ;
1576
- let value = truncate ( value, discr . value . size ( cx) ) ;
1576
+ let value = truncate ( value, tag . value . size ( cx) ) ;
1577
1577
// NOTE(eddyb) do *NOT* remove this assert, until
1578
1578
// we pass the full 128-bit value to LLVM, otherwise
1579
1579
// truncation will be silent and remain undetected.
@@ -1603,7 +1603,7 @@ struct VariantMemberDescriptionFactory<'ll, 'tcx> {
1603
1603
/// Cloned from the `layout::Struct` describing the variant.
1604
1604
offsets : Vec < Size > ,
1605
1605
args : Vec < ( String , Ty < ' tcx > ) > ,
1606
- discriminant_type_metadata : Option < & ' ll DIType > ,
1606
+ tag_type_metadata : Option < & ' ll DIType > ,
1607
1607
span : Span ,
1608
1608
}
1609
1609
@@ -1617,7 +1617,7 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
1617
1617
MemberDescription {
1618
1618
name : name. to_string ( ) ,
1619
1619
type_metadata : if use_enum_fallback ( cx) {
1620
- match self . discriminant_type_metadata {
1620
+ match self . tag_type_metadata {
1621
1621
// Discriminant is always the first field of our variant
1622
1622
// when using the enum fallback.
1623
1623
Some ( metadata) if i == 0 => metadata,
@@ -1637,11 +1637,14 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
1637
1637
}
1638
1638
}
1639
1639
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.
1640
1643
#[ 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 ,
1645
1648
}
1646
1649
1647
1650
#[ derive( Copy , Clone ) ]
@@ -1706,7 +1709,7 @@ fn describe_enum_variant(
1706
1709
cx : & CodegenCx < ' ll , ' tcx > ,
1707
1710
layout : layout:: TyAndLayout < ' tcx > ,
1708
1711
variant : VariantInfo < ' _ , ' tcx > ,
1709
- discriminant_info : EnumDiscriminantInfo < ' ll > ,
1712
+ discriminant_info : EnumTagInfo < ' ll > ,
1710
1713
containing_scope : & ' ll DIScope ,
1711
1714
span : Span ,
1712
1715
) -> ( & ' ll DICompositeType , MemberDescriptionFactory < ' ll , ' tcx > ) {
@@ -1722,12 +1725,12 @@ fn describe_enum_variant(
1722
1725
let ( offsets, args) = if use_enum_fallback ( cx) {
1723
1726
// If this is not a univariant enum, there is also the discriminant field.
1724
1727
let ( discr_offset, discr_arg) = match discriminant_info {
1725
- RegularDiscriminant { discr_field , .. } => {
1728
+ RegularTag { tag_field , .. } => {
1726
1729
// We have the layout of an enum variant, we need the layout of the outer enum
1727
1730
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 ( ) ) ;
1729
1732
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 ) ;
1731
1734
( Some ( offset) , Some ( args) )
1732
1735
}
1733
1736
_ => ( None , None ) ,
@@ -1757,8 +1760,8 @@ fn describe_enum_variant(
1757
1760
let member_description_factory = VariantMDF ( VariantMemberDescriptionFactory {
1758
1761
offsets,
1759
1762
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 ) ,
1762
1765
_ => None ,
1763
1766
} ,
1764
1767
span,
@@ -1880,18 +1883,18 @@ fn prepare_enum_metadata(
1880
1883
1881
1884
if let (
1882
1885
& Abi :: Scalar ( _) ,
1883
- & Variants :: Multiple { discr_kind : DiscriminantKind :: Tag , ref discr , .. } ,
1886
+ & Variants :: Multiple { tag_encoding : TagEncoding :: Direct , ref tag , .. } ,
1884
1887
) = ( & layout. abi , & layout. variants )
1885
1888
{
1886
- return FinalMetadata ( discriminant_type_metadata ( discr . value ) ) ;
1889
+ return FinalMetadata ( discriminant_type_metadata ( tag . value ) ) ;
1887
1890
}
1888
1891
1889
1892
if use_enum_fallback ( cx) {
1890
1893
let discriminant_type_metadata = match layout. variants {
1891
1894
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 ) )
1895
1898
}
1896
1899
} ;
1897
1900
@@ -1927,7 +1930,7 @@ fn prepare_enum_metadata(
1927
1930
EnumMDF ( EnumMemberDescriptionFactory {
1928
1931
enum_type,
1929
1932
layout,
1930
- discriminant_type_metadata,
1933
+ tag_type_metadata : discriminant_type_metadata,
1931
1934
containing_scope,
1932
1935
span,
1933
1936
} ) ,
@@ -1943,24 +1946,21 @@ fn prepare_enum_metadata(
1943
1946
Variants :: Single { .. } => None ,
1944
1947
1945
1948
Variants :: Multiple {
1946
- discr_kind : DiscriminantKind :: Niche { .. } ,
1947
- ref discr,
1948
- discr_index,
1949
- ..
1949
+ tag_encoding : TagEncoding :: Niche { .. } , ref tag, tag_field, ..
1950
1950
} => {
1951
1951
// 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) ;
1954
1954
1955
- let discr_type = match discr . value {
1955
+ let tag_type = match tag . value {
1956
1956
Int ( t, _) => t,
1957
1957
F32 => Integer :: I32 ,
1958
1958
F64 => Integer :: I64 ,
1959
1959
Pointer => cx. data_layout ( ) . ptr_sized_integer ( ) ,
1960
1960
}
1961
1961
. to_ty ( cx. tcx , false ) ;
1962
1962
1963
- let discr_metadata = basic_type_metadata ( cx, discr_type ) ;
1963
+ let tag_metadata = basic_type_metadata ( cx, tag_type ) ;
1964
1964
unsafe {
1965
1965
Some ( llvm:: LLVMRustDIBuilderCreateMemberType (
1966
1966
DIB ( cx) ,
@@ -1971,17 +1971,15 @@ fn prepare_enum_metadata(
1971
1971
UNKNOWN_LINE_NUMBER ,
1972
1972
size. bits ( ) ,
1973
1973
align. abi . bits ( ) as u32 ,
1974
- layout. fields . offset ( discr_index ) . bits ( ) ,
1974
+ layout. fields . offset ( tag_field ) . bits ( ) ,
1975
1975
DIFlags :: FlagArtificial ,
1976
- discr_metadata ,
1976
+ tag_metadata ,
1977
1977
) )
1978
1978
}
1979
1979
}
1980
1980
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 ) ;
1985
1983
let ( size, align) = cx. size_and_align_of ( discr_type) ;
1986
1984
1987
1985
let discr_metadata = basic_type_metadata ( cx, discr_type) ;
@@ -1995,7 +1993,7 @@ fn prepare_enum_metadata(
1995
1993
UNKNOWN_LINE_NUMBER ,
1996
1994
size. bits ( ) ,
1997
1995
align. bits ( ) as u32 ,
1998
- layout. fields . offset ( discr_index ) . bits ( ) ,
1996
+ layout. fields . offset ( tag_field ) . bits ( ) ,
1999
1997
DIFlags :: FlagArtificial ,
2000
1998
discr_metadata,
2001
1999
) )
@@ -2081,7 +2079,7 @@ fn prepare_enum_metadata(
2081
2079
EnumMDF ( EnumMemberDescriptionFactory {
2082
2080
enum_type,
2083
2081
layout,
2084
- discriminant_type_metadata : None ,
2082
+ tag_type_metadata : None ,
2085
2083
containing_scope,
2086
2084
span,
2087
2085
} ) ,
0 commit comments