@@ -863,7 +863,7 @@ fn foreign_type_metadata(
863863 debug ! ( "foreign_type_metadata: {:?}" , t) ;
864864
865865 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 )
867867}
868868
869869fn pointer_type_metadata (
@@ -1161,8 +1161,14 @@ fn prepare_struct_metadata(
11611161
11621162 let containing_scope = get_namespace_for_item ( cx, struct_def_id) ;
11631163
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+ ) ;
11661172
11671173 create_and_register_recursive_type_forward_declaration (
11681174 cx,
@@ -1218,8 +1224,14 @@ fn prepare_tuple_metadata(
12181224) -> RecursiveTypeDescription < ' ll , ' tcx > {
12191225 let tuple_name = compute_debuginfo_type_name ( cx. tcx , tuple_type, false ) ;
12201226
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+ ) ;
12231235
12241236 create_and_register_recursive_type_forward_declaration (
12251237 cx,
@@ -1390,6 +1402,10 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
13901402 } else {
13911403 type_metadata ( cx, self . enum_type , self . span )
13921404 } ;
1405+ let flags = match self . enum_type . kind {
1406+ ty:: Generator ( ..) => DIFlags :: FlagArtificial ,
1407+ _ => DIFlags :: FlagZero ,
1408+ } ;
13931409
13941410 match self . layout . variants {
13951411 Variants :: Single { index } => {
@@ -1423,7 +1439,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
14231439 offset: Size :: ZERO ,
14241440 size: self . layout. size,
14251441 align: self . layout. align. abi,
1426- flags: DIFlags :: FlagZero ,
1442+ flags,
14271443 discriminant: None ,
14281444 source_info: variant_info. source_info( cx) ,
14291445 } ]
@@ -1477,7 +1493,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
14771493 offset : Size :: ZERO ,
14781494 size : self . layout . size ,
14791495 align : self . layout . align . abi ,
1480- flags : DIFlags :: FlagZero ,
1496+ flags,
14811497 discriminant : Some (
14821498 self . layout . ty . discriminant_for_variant ( cx. tcx , i) . unwrap ( ) . val
14831499 as u64 ,
@@ -1560,7 +1576,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
15601576 offset: Size :: ZERO ,
15611577 size: variant. size,
15621578 align: variant. align. abi,
1563- flags: DIFlags :: FlagZero ,
1579+ flags,
15641580 discriminant: None ,
15651581 source_info: variant_info. source_info( cx) ,
15661582 } ]
@@ -1610,7 +1626,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
16101626 offset : Size :: ZERO ,
16111627 size : self . layout . size ,
16121628 align : self . layout . align . abi ,
1613- flags : DIFlags :: FlagZero ,
1629+ flags,
16141630 discriminant : niche_value,
16151631 source_info : variant_info. source_info ( cx) ,
16161632 }
@@ -1743,6 +1759,14 @@ impl<'tcx> VariantInfo<'_, 'tcx> {
17431759 }
17441760 None
17451761 }
1762+
1763+ #[ allow( dead_code) ]
1764+ fn is_artificial ( & self ) -> bool {
1765+ match self {
1766+ VariantInfo :: Generator { .. } => true ,
1767+ VariantInfo :: Adt ( ..) => false ,
1768+ }
1769+ }
17461770}
17471771
17481772/// Returns a tuple of (1) `type_metadata_stub` of the variant, (2) a
@@ -1762,7 +1786,15 @@ fn describe_enum_variant(
17621786 . type_map
17631787 . borrow_mut ( )
17641788 . 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+ )
17661798 } ) ;
17671799
17681800 // Build an array of (field name, field type) pairs to be captured in the factory closure.
@@ -1824,6 +1856,11 @@ fn prepare_enum_metadata(
18241856) -> RecursiveTypeDescription < ' ll , ' tcx > {
18251857 let tcx = cx. tcx ;
18261858 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+ } ;
18271864
18281865 let containing_scope = get_namespace_for_item ( cx, enum_def_id) ;
18291866 // FIXME: This should emit actual file metadata for the enum, but we
@@ -1958,7 +1995,7 @@ fn prepare_enum_metadata(
19581995 UNKNOWN_LINE_NUMBER ,
19591996 layout. size . bits ( ) ,
19601997 layout. align . abi . bits ( ) as u32 ,
1961- DIFlags :: FlagZero ,
1998+ enum_flags ,
19621999 None ,
19632000 0 , // RuntimeLang
19642001 unique_type_id_str. as_ptr ( ) . cast ( ) ,
@@ -2079,7 +2116,7 @@ fn prepare_enum_metadata(
20792116 UNKNOWN_LINE_NUMBER ,
20802117 layout. size . bits ( ) ,
20812118 layout. align . abi . bits ( ) as u32 ,
2082- DIFlags :: FlagZero ,
2119+ enum_flags ,
20832120 discriminator_metadata,
20842121 empty_array,
20852122 variant_part_unique_type_id_str. as_ptr ( ) . cast ( ) ,
@@ -2105,7 +2142,7 @@ fn prepare_enum_metadata(
21052142 UNKNOWN_LINE_NUMBER ,
21062143 layout. size . bits ( ) ,
21072144 layout. align . abi . bits ( ) as u32 ,
2108- DIFlags :: FlagZero ,
2145+ enum_flags ,
21092146 None ,
21102147 type_array,
21112148 0 ,
@@ -2156,6 +2193,7 @@ fn composite_type_metadata(
21562193 composite_type_name,
21572194 composite_type_unique_id,
21582195 containing_scope,
2196+ DIFlags :: FlagZero ,
21592197 ) ;
21602198 // ... and immediately create and add the member descriptions.
21612199 set_members_of_composite_type ( cx, composite_type, composite_type_metadata, member_descriptions) ;
@@ -2257,6 +2295,7 @@ fn create_struct_stub(
22572295 struct_type_name : & str ,
22582296 unique_type_id : UniqueTypeId ,
22592297 containing_scope : Option < & ' ll DIScope > ,
2298+ flags : DIFlags ,
22602299) -> & ' ll DICompositeType {
22612300 let ( struct_size, struct_align) = cx. size_and_align_of ( struct_type) ;
22622301
@@ -2278,7 +2317,7 @@ fn create_struct_stub(
22782317 UNKNOWN_LINE_NUMBER ,
22792318 struct_size. bits ( ) ,
22802319 struct_align. bits ( ) as u32 ,
2281- DIFlags :: FlagZero ,
2320+ flags ,
22822321 None ,
22832322 empty_array,
22842323 0 ,
0 commit comments