@@ -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 }
@@ -1740,6 +1756,14 @@ impl<'tcx> VariantInfo<'_, 'tcx> {
17401756 }
17411757 None
17421758 }
1759+
1760+ #[ allow( dead_code) ]
1761+ fn is_artificial ( & self ) -> bool {
1762+ match self {
1763+ VariantInfo :: Generator { .. } => true ,
1764+ VariantInfo :: Adt ( ..) => false ,
1765+ }
1766+ }
17431767}
17441768
17451769/// Returns a tuple of (1) `type_metadata_stub` of the variant, (2) a
@@ -1759,7 +1783,15 @@ fn describe_enum_variant(
17591783 . type_map
17601784 . borrow_mut ( )
17611785 . 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+ )
17631795 } ) ;
17641796
17651797 // Build an array of (field name, field type) pairs to be captured in the factory closure.
@@ -1821,6 +1853,11 @@ fn prepare_enum_metadata(
18211853) -> RecursiveTypeDescription < ' ll , ' tcx > {
18221854 let tcx = cx. tcx ;
18231855 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+ } ;
18241861
18251862 let containing_scope = get_namespace_for_item ( cx, enum_def_id) ;
18261863 // FIXME: This should emit actual file metadata for the enum, but we
@@ -1955,7 +1992,7 @@ fn prepare_enum_metadata(
19551992 UNKNOWN_LINE_NUMBER ,
19561993 layout. size . bits ( ) ,
19571994 layout. align . abi . bits ( ) as u32 ,
1958- DIFlags :: FlagZero ,
1995+ enum_flags ,
19591996 None ,
19601997 0 , // RuntimeLang
19611998 unique_type_id_str. as_ptr ( ) . cast ( ) ,
@@ -2081,7 +2118,7 @@ fn prepare_enum_metadata(
20812118 UNKNOWN_LINE_NUMBER ,
20822119 layout. size . bits ( ) ,
20832120 layout. align . abi . bits ( ) as u32 ,
2084- DIFlags :: FlagZero ,
2121+ enum_flags ,
20852122 discriminator_metadata,
20862123 empty_array,
20872124 variant_part_unique_type_id_str. as_ptr ( ) . cast ( ) ,
@@ -2107,7 +2144,7 @@ fn prepare_enum_metadata(
21072144 UNKNOWN_LINE_NUMBER ,
21082145 layout. size . bits ( ) ,
21092146 layout. align . abi . bits ( ) as u32 ,
2110- DIFlags :: FlagZero ,
2147+ enum_flags ,
21112148 None ,
21122149 type_array,
21132150 0 ,
@@ -2158,6 +2195,7 @@ fn composite_type_metadata(
21582195 composite_type_name,
21592196 composite_type_unique_id,
21602197 containing_scope,
2198+ DIFlags :: FlagZero ,
21612199 ) ;
21622200 // ... and immediately create and add the member descriptions.
21632201 set_members_of_composite_type ( cx, composite_type, composite_type_metadata, member_descriptions) ;
@@ -2259,6 +2297,7 @@ fn create_struct_stub(
22592297 struct_type_name : & str ,
22602298 unique_type_id : UniqueTypeId ,
22612299 containing_scope : Option < & ' ll DIScope > ,
2300+ flags : DIFlags ,
22622301) -> & ' ll DICompositeType {
22632302 let ( struct_size, struct_align) = cx. size_and_align_of ( struct_type) ;
22642303
@@ -2280,7 +2319,7 @@ fn create_struct_stub(
22802319 UNKNOWN_LINE_NUMBER ,
22812320 struct_size. bits ( ) ,
22822321 struct_align. bits ( ) as u32 ,
2283- DIFlags :: FlagZero ,
2322+ flags ,
22842323 None ,
22852324 empty_array,
22862325 0 ,
0 commit comments