@@ -863,7 +863,7 @@ fn foreign_type_metadata(
863
863
debug ! ( "foreign_type_metadata: {:?}" , t) ;
864
864
865
865
let name = compute_debuginfo_type_name ( cx. tcx , t, false ) ;
866
- create_struct_stub ( cx, t, & name, unique_type_id, NO_SCOPE_METADATA )
866
+ create_struct_stub ( cx, t, & name, unique_type_id, NO_SCOPE_METADATA , DIFlags :: FlagZero )
867
867
}
868
868
869
869
fn pointer_type_metadata (
@@ -1161,8 +1161,14 @@ fn prepare_struct_metadata(
1161
1161
1162
1162
let containing_scope = get_namespace_for_item ( cx, struct_def_id) ;
1163
1163
1164
- let struct_metadata_stub =
1165
- create_struct_stub ( cx, struct_type, & struct_name, unique_type_id, Some ( containing_scope) ) ;
1164
+ let struct_metadata_stub = create_struct_stub (
1165
+ cx,
1166
+ struct_type,
1167
+ & struct_name,
1168
+ unique_type_id,
1169
+ Some ( containing_scope) ,
1170
+ DIFlags :: FlagZero ,
1171
+ ) ;
1166
1172
1167
1173
create_and_register_recursive_type_forward_declaration (
1168
1174
cx,
@@ -1218,8 +1224,14 @@ fn prepare_tuple_metadata(
1218
1224
) -> RecursiveTypeDescription < ' ll , ' tcx > {
1219
1225
let tuple_name = compute_debuginfo_type_name ( cx. tcx , tuple_type, false ) ;
1220
1226
1221
- let struct_stub =
1222
- create_struct_stub ( cx, tuple_type, & tuple_name[ ..] , unique_type_id, containing_scope) ;
1227
+ let struct_stub = create_struct_stub (
1228
+ cx,
1229
+ tuple_type,
1230
+ & tuple_name[ ..] ,
1231
+ unique_type_id,
1232
+ containing_scope,
1233
+ DIFlags :: FlagZero ,
1234
+ ) ;
1223
1235
1224
1236
create_and_register_recursive_type_forward_declaration (
1225
1237
cx,
@@ -1390,6 +1402,10 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1390
1402
} else {
1391
1403
type_metadata ( cx, self . enum_type , self . span )
1392
1404
} ;
1405
+ let flags = match self . enum_type . kind {
1406
+ ty:: Generator ( ..) => DIFlags :: FlagArtificial ,
1407
+ _ => DIFlags :: FlagZero ,
1408
+ } ;
1393
1409
1394
1410
match self . layout . variants {
1395
1411
Variants :: Single { index } => {
@@ -1423,7 +1439,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1423
1439
offset: Size :: ZERO ,
1424
1440
size: self . layout. size,
1425
1441
align: self . layout. align. abi,
1426
- flags: DIFlags :: FlagZero ,
1442
+ flags,
1427
1443
discriminant: None ,
1428
1444
source_info: variant_info. source_info( cx) ,
1429
1445
} ]
@@ -1477,7 +1493,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1477
1493
offset : Size :: ZERO ,
1478
1494
size : self . layout . size ,
1479
1495
align : self . layout . align . abi ,
1480
- flags : DIFlags :: FlagZero ,
1496
+ flags,
1481
1497
discriminant : Some (
1482
1498
self . layout . ty . discriminant_for_variant ( cx. tcx , i) . unwrap ( ) . val
1483
1499
as u64 ,
@@ -1560,7 +1576,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1560
1576
offset: Size :: ZERO ,
1561
1577
size: variant. size,
1562
1578
align: variant. align. abi,
1563
- flags: DIFlags :: FlagZero ,
1579
+ flags,
1564
1580
discriminant: None ,
1565
1581
source_info: variant_info. source_info( cx) ,
1566
1582
} ]
@@ -1610,7 +1626,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
1610
1626
offset : Size :: ZERO ,
1611
1627
size : self . layout . size ,
1612
1628
align : self . layout . align . abi ,
1613
- flags : DIFlags :: FlagZero ,
1629
+ flags,
1614
1630
discriminant : niche_value,
1615
1631
source_info : variant_info. source_info ( cx) ,
1616
1632
}
@@ -1740,6 +1756,14 @@ impl<'tcx> VariantInfo<'_, 'tcx> {
1740
1756
}
1741
1757
None
1742
1758
}
1759
+
1760
+ #[ allow( dead_code) ]
1761
+ fn is_artificial ( & self ) -> bool {
1762
+ match self {
1763
+ VariantInfo :: Generator { .. } => true ,
1764
+ VariantInfo :: Adt ( ..) => false ,
1765
+ }
1766
+ }
1743
1767
}
1744
1768
1745
1769
/// Returns a tuple of (1) `type_metadata_stub` of the variant, (2) a
@@ -1759,7 +1783,15 @@ fn describe_enum_variant(
1759
1783
. type_map
1760
1784
. borrow_mut ( )
1761
1785
. get_unique_type_id_of_enum_variant ( cx, layout. ty , & variant_name) ;
1762
- create_struct_stub ( cx, layout. ty , & variant_name, unique_type_id, Some ( containing_scope) )
1786
+ create_struct_stub (
1787
+ cx,
1788
+ layout. ty ,
1789
+ & variant_name,
1790
+ unique_type_id,
1791
+ Some ( containing_scope) ,
1792
+ // FIXME(tmandry): This doesn't seem to have any effect.
1793
+ if variant. is_artificial ( ) { DIFlags :: FlagArtificial } else { DIFlags :: FlagZero } ,
1794
+ )
1763
1795
} ) ;
1764
1796
1765
1797
// Build an array of (field name, field type) pairs to be captured in the factory closure.
@@ -1821,6 +1853,11 @@ fn prepare_enum_metadata(
1821
1853
) -> RecursiveTypeDescription < ' ll , ' tcx > {
1822
1854
let tcx = cx. tcx ;
1823
1855
let enum_name = compute_debuginfo_type_name ( tcx, enum_type, false ) ;
1856
+ // FIXME(tmandry): This doesn't seem to have any effect.
1857
+ let enum_flags = match enum_type. kind {
1858
+ ty:: Generator ( ..) => DIFlags :: FlagArtificial ,
1859
+ _ => DIFlags :: FlagZero ,
1860
+ } ;
1824
1861
1825
1862
let containing_scope = get_namespace_for_item ( cx, enum_def_id) ;
1826
1863
// FIXME: This should emit actual file metadata for the enum, but we
@@ -1955,7 +1992,7 @@ fn prepare_enum_metadata(
1955
1992
UNKNOWN_LINE_NUMBER ,
1956
1993
layout. size . bits ( ) ,
1957
1994
layout. align . abi . bits ( ) as u32 ,
1958
- DIFlags :: FlagZero ,
1995
+ enum_flags ,
1959
1996
None ,
1960
1997
0 , // RuntimeLang
1961
1998
unique_type_id_str. as_ptr ( ) . cast ( ) ,
@@ -2081,7 +2118,7 @@ fn prepare_enum_metadata(
2081
2118
UNKNOWN_LINE_NUMBER ,
2082
2119
layout. size . bits ( ) ,
2083
2120
layout. align . abi . bits ( ) as u32 ,
2084
- DIFlags :: FlagZero ,
2121
+ enum_flags ,
2085
2122
discriminator_metadata,
2086
2123
empty_array,
2087
2124
variant_part_unique_type_id_str. as_ptr ( ) . cast ( ) ,
@@ -2107,7 +2144,7 @@ fn prepare_enum_metadata(
2107
2144
UNKNOWN_LINE_NUMBER ,
2108
2145
layout. size . bits ( ) ,
2109
2146
layout. align . abi . bits ( ) as u32 ,
2110
- DIFlags :: FlagZero ,
2147
+ enum_flags ,
2111
2148
None ,
2112
2149
type_array,
2113
2150
0 ,
@@ -2158,6 +2195,7 @@ fn composite_type_metadata(
2158
2195
composite_type_name,
2159
2196
composite_type_unique_id,
2160
2197
containing_scope,
2198
+ DIFlags :: FlagZero ,
2161
2199
) ;
2162
2200
// ... and immediately create and add the member descriptions.
2163
2201
set_members_of_composite_type ( cx, composite_type, composite_type_metadata, member_descriptions) ;
@@ -2259,6 +2297,7 @@ fn create_struct_stub(
2259
2297
struct_type_name : & str ,
2260
2298
unique_type_id : UniqueTypeId ,
2261
2299
containing_scope : Option < & ' ll DIScope > ,
2300
+ flags : DIFlags ,
2262
2301
) -> & ' ll DICompositeType {
2263
2302
let ( struct_size, struct_align) = cx. size_and_align_of ( struct_type) ;
2264
2303
@@ -2280,7 +2319,7 @@ fn create_struct_stub(
2280
2319
UNKNOWN_LINE_NUMBER ,
2281
2320
struct_size. bits ( ) ,
2282
2321
struct_align. bits ( ) as u32 ,
2283
- DIFlags :: FlagZero ,
2322
+ flags ,
2284
2323
None ,
2285
2324
empty_array,
2286
2325
0 ,
0 commit comments