@@ -26,8 +26,8 @@ use crate::{
2626 enums:: { tag_base_type, DiscrResult } ,
2727 file_metadata, size_and_align_of, type_di_node,
2828 type_map:: { self , Stub , UniqueTypeId } ,
29- unknown_file_metadata, DINodeCreationResult , SmallVec , NO_GENERICS , NO_SCOPE_METADATA ,
30- UNKNOWN_LINE_NUMBER ,
29+ unknown_file_metadata, visibility_di_flags , DINodeCreationResult , SmallVec ,
30+ NO_GENERICS , NO_SCOPE_METADATA , UNKNOWN_LINE_NUMBER ,
3131 } ,
3232 utils:: DIB ,
3333 } ,
@@ -215,7 +215,7 @@ pub(super) fn build_enum_type_di_node<'ll, 'tcx>(
215215 & enum_type_name,
216216 cx. size_and_align_of ( enum_type) ,
217217 NO_SCOPE_METADATA ,
218- DIFlags :: FlagZero ,
218+ visibility_di_flags ( cx , enum_adt_def . did ( ) , enum_adt_def . did ( ) ) ,
219219 ) ,
220220 |cx, enum_type_di_node| {
221221 match enum_type_and_layout. variants {
@@ -320,13 +320,15 @@ fn build_single_variant_union_fields<'ll, 'tcx>(
320320 variant_index : VariantIdx ,
321321) -> SmallVec < & ' ll DIType > {
322322 let variant_layout = enum_type_and_layout. for_variant ( cx, variant_index) ;
323+ let visibility_flags = visibility_di_flags ( cx, enum_adt_def. did ( ) , enum_adt_def. did ( ) ) ;
323324 let variant_struct_type_di_node = super :: build_enum_variant_struct_type_di_node (
324325 cx,
325326 enum_type_and_layout,
326327 enum_type_di_node,
327328 variant_index,
328329 enum_adt_def. variant ( variant_index) ,
329330 variant_layout,
331+ visibility_flags,
330332 ) ;
331333
332334 let tag_base_type = cx. tcx . types . u32 ;
@@ -364,7 +366,7 @@ fn build_single_variant_union_fields<'ll, 'tcx>(
364366 // since the later is sometimes smaller (if it has fewer fields).
365367 size_and_align_of( enum_type_and_layout) ,
366368 Size :: ZERO ,
367- DIFlags :: FlagZero ,
369+ visibility_flags ,
368370 variant_struct_type_wrapper_di_node,
369371 ) ,
370372 unsafe {
@@ -376,7 +378,7 @@ fn build_single_variant_union_fields<'ll, 'tcx>(
376378 unknown_file_metadata( cx) ,
377379 UNKNOWN_LINE_NUMBER ,
378380 variant_names_type_di_node,
379- DIFlags :: FlagZero ,
381+ visibility_flags ,
380382 Some ( cx. const_u64( SINGLE_VARIANT_VIRTUAL_DISR ) ) ,
381383 tag_base_type_align. bits( ) as u32 ,
382384 )
@@ -403,6 +405,7 @@ fn build_union_fields_for_enum<'ll, 'tcx>(
403405 ( variant_index, variant_name)
404406 } ) ,
405407 ) ;
408+ let visibility_flags = visibility_di_flags ( cx, enum_adt_def. did ( ) , enum_adt_def. did ( ) ) ;
406409
407410 let variant_field_infos: SmallVec < VariantFieldInfo < ' ll > > = variant_indices
408411 . map ( |variant_index| {
@@ -417,6 +420,7 @@ fn build_union_fields_for_enum<'ll, 'tcx>(
417420 variant_index,
418421 variant_def,
419422 variant_layout,
423+ visibility_flags,
420424 ) ;
421425
422426 VariantFieldInfo {
@@ -437,6 +441,7 @@ fn build_union_fields_for_enum<'ll, 'tcx>(
437441 tag_base_type,
438442 tag_field,
439443 untagged_variant_index,
444+ visibility_flags,
440445 )
441446}
442447
@@ -744,6 +749,7 @@ fn build_union_fields_for_direct_tag_coroutine<'ll, 'tcx>(
744749 tag_base_type,
745750 tag_field,
746751 None ,
752+ DIFlags :: FlagZero ,
747753 )
748754}
749755
@@ -758,6 +764,7 @@ fn build_union_fields_for_direct_tag_enum_or_coroutine<'ll, 'tcx>(
758764 tag_base_type : Ty < ' tcx > ,
759765 tag_field : usize ,
760766 untagged_variant_index : Option < VariantIdx > ,
767+ di_flags : DIFlags ,
761768) -> SmallVec < & ' ll DIType > {
762769 let tag_base_type_di_node = type_di_node ( cx, tag_base_type) ;
763770 let mut unions_fields = SmallVec :: with_capacity ( variant_field_infos. len ( ) + 1 ) ;
@@ -801,7 +808,7 @@ fn build_union_fields_for_direct_tag_enum_or_coroutine<'ll, 'tcx>(
801808 align. bits ( ) as u32 ,
802809 // Union fields are always at offset zero
803810 Size :: ZERO . bits ( ) ,
804- DIFlags :: FlagZero ,
811+ di_flags ,
805812 variant_struct_type_wrapper,
806813 )
807814 }
@@ -835,7 +842,7 @@ fn build_union_fields_for_direct_tag_enum_or_coroutine<'ll, 'tcx>(
835842 TAG_FIELD_NAME_128_LO ,
836843 size_and_align,
837844 lo_offset,
838- DIFlags :: FlagZero ,
845+ di_flags ,
839846 type_di_node,
840847 ) ) ;
841848
@@ -855,7 +862,7 @@ fn build_union_fields_for_direct_tag_enum_or_coroutine<'ll, 'tcx>(
855862 TAG_FIELD_NAME ,
856863 cx. size_and_align_of ( enum_type_and_layout. field ( cx, tag_field) . ty ) ,
857864 enum_type_and_layout. fields . offset ( tag_field) ,
858- DIFlags :: FlagZero ,
865+ di_flags ,
859866 tag_base_type_di_node,
860867 ) ) ;
861868 }
0 commit comments