@@ -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
}
@@ -1743,6 +1759,14 @@ impl<'tcx> VariantInfo<'_, 'tcx> {
1743
1759
}
1744
1760
None
1745
1761
}
1762
+
1763
+ #[ allow( dead_code) ]
1764
+ fn is_artificial ( & self ) -> bool {
1765
+ match self {
1766
+ VariantInfo :: Generator { .. } => true ,
1767
+ VariantInfo :: Adt ( ..) => false ,
1768
+ }
1769
+ }
1746
1770
}
1747
1771
1748
1772
/// Returns a tuple of (1) `type_metadata_stub` of the variant, (2) a
@@ -1762,7 +1786,15 @@ fn describe_enum_variant(
1762
1786
. type_map
1763
1787
. borrow_mut ( )
1764
1788
. get_unique_type_id_of_enum_variant ( cx, layout. ty , & variant_name) ;
1765
- create_struct_stub ( cx, layout. ty , & variant_name, unique_type_id, Some ( containing_scope) )
1789
+ create_struct_stub (
1790
+ cx,
1791
+ layout. ty ,
1792
+ & variant_name,
1793
+ unique_type_id,
1794
+ Some ( containing_scope) ,
1795
+ // FIXME(tmandry): This doesn't seem to have any effect.
1796
+ if variant. is_artificial ( ) { DIFlags :: FlagArtificial } else { DIFlags :: FlagZero } ,
1797
+ )
1766
1798
} ) ;
1767
1799
1768
1800
// Build an array of (field name, field type) pairs to be captured in the factory closure.
@@ -1824,6 +1856,11 @@ fn prepare_enum_metadata(
1824
1856
) -> RecursiveTypeDescription < ' ll , ' tcx > {
1825
1857
let tcx = cx. tcx ;
1826
1858
let enum_name = compute_debuginfo_type_name ( tcx, enum_type, false ) ;
1859
+ // FIXME(tmandry): This doesn't seem to have any effect.
1860
+ let enum_flags = match enum_type. kind {
1861
+ ty:: Generator ( ..) => DIFlags :: FlagArtificial ,
1862
+ _ => DIFlags :: FlagZero ,
1863
+ } ;
1827
1864
1828
1865
let containing_scope = get_namespace_for_item ( cx, enum_def_id) ;
1829
1866
// FIXME: This should emit actual file metadata for the enum, but we
@@ -1958,7 +1995,7 @@ fn prepare_enum_metadata(
1958
1995
UNKNOWN_LINE_NUMBER ,
1959
1996
layout. size . bits ( ) ,
1960
1997
layout. align . abi . bits ( ) as u32 ,
1961
- DIFlags :: FlagZero ,
1998
+ enum_flags ,
1962
1999
None ,
1963
2000
0 , // RuntimeLang
1964
2001
unique_type_id_str. as_ptr ( ) . cast ( ) ,
@@ -2079,7 +2116,7 @@ fn prepare_enum_metadata(
2079
2116
UNKNOWN_LINE_NUMBER ,
2080
2117
layout. size . bits ( ) ,
2081
2118
layout. align . abi . bits ( ) as u32 ,
2082
- DIFlags :: FlagZero ,
2119
+ enum_flags ,
2083
2120
discriminator_metadata,
2084
2121
empty_array,
2085
2122
variant_part_unique_type_id_str. as_ptr ( ) . cast ( ) ,
@@ -2105,7 +2142,7 @@ fn prepare_enum_metadata(
2105
2142
UNKNOWN_LINE_NUMBER ,
2106
2143
layout. size . bits ( ) ,
2107
2144
layout. align . abi . bits ( ) as u32 ,
2108
- DIFlags :: FlagZero ,
2145
+ enum_flags ,
2109
2146
None ,
2110
2147
type_array,
2111
2148
0 ,
@@ -2156,6 +2193,7 @@ fn composite_type_metadata(
2156
2193
composite_type_name,
2157
2194
composite_type_unique_id,
2158
2195
containing_scope,
2196
+ DIFlags :: FlagZero ,
2159
2197
) ;
2160
2198
// ... and immediately create and add the member descriptions.
2161
2199
set_members_of_composite_type ( cx, composite_type, composite_type_metadata, member_descriptions) ;
@@ -2257,6 +2295,7 @@ fn create_struct_stub(
2257
2295
struct_type_name : & str ,
2258
2296
unique_type_id : UniqueTypeId ,
2259
2297
containing_scope : Option < & ' ll DIScope > ,
2298
+ flags : DIFlags ,
2260
2299
) -> & ' ll DICompositeType {
2261
2300
let ( struct_size, struct_align) = cx. size_and_align_of ( struct_type) ;
2262
2301
@@ -2278,7 +2317,7 @@ fn create_struct_stub(
2278
2317
UNKNOWN_LINE_NUMBER ,
2279
2318
struct_size. bits ( ) ,
2280
2319
struct_align. bits ( ) as u32 ,
2281
- DIFlags :: FlagZero ,
2320
+ flags ,
2282
2321
None ,
2283
2322
empty_array,
2284
2323
0 ,
0 commit comments