@@ -26,8 +26,8 @@ use crate::{
26
26
enums:: { tag_base_type, DiscrResult } ,
27
27
file_metadata, size_and_align_of, type_di_node,
28
28
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 ,
31
31
} ,
32
32
utils:: DIB ,
33
33
} ,
@@ -215,7 +215,7 @@ pub(super) fn build_enum_type_di_node<'ll, 'tcx>(
215
215
& enum_type_name,
216
216
cx. size_and_align_of ( enum_type) ,
217
217
NO_SCOPE_METADATA ,
218
- DIFlags :: FlagZero ,
218
+ visibility_di_flags ( cx , enum_adt_def . did ( ) , enum_adt_def . did ( ) ) ,
219
219
) ,
220
220
|cx, enum_type_di_node| {
221
221
match enum_type_and_layout. variants {
@@ -320,13 +320,15 @@ fn build_single_variant_union_fields<'ll, 'tcx>(
320
320
variant_index : VariantIdx ,
321
321
) -> SmallVec < & ' ll DIType > {
322
322
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 ( ) ) ;
323
324
let variant_struct_type_di_node = super :: build_enum_variant_struct_type_di_node (
324
325
cx,
325
326
enum_type_and_layout,
326
327
enum_type_di_node,
327
328
variant_index,
328
329
enum_adt_def. variant ( variant_index) ,
329
330
variant_layout,
331
+ visibility_flags,
330
332
) ;
331
333
332
334
let tag_base_type = cx. tcx . types . u32 ;
@@ -364,7 +366,7 @@ fn build_single_variant_union_fields<'ll, 'tcx>(
364
366
// since the later is sometimes smaller (if it has fewer fields).
365
367
size_and_align_of( enum_type_and_layout) ,
366
368
Size :: ZERO ,
367
- DIFlags :: FlagZero ,
369
+ visibility_flags ,
368
370
variant_struct_type_wrapper_di_node,
369
371
) ,
370
372
unsafe {
@@ -376,7 +378,7 @@ fn build_single_variant_union_fields<'ll, 'tcx>(
376
378
unknown_file_metadata( cx) ,
377
379
UNKNOWN_LINE_NUMBER ,
378
380
variant_names_type_di_node,
379
- DIFlags :: FlagZero ,
381
+ visibility_flags ,
380
382
Some ( cx. const_u64( SINGLE_VARIANT_VIRTUAL_DISR ) ) ,
381
383
tag_base_type_align. bits( ) as u32 ,
382
384
)
@@ -403,6 +405,7 @@ fn build_union_fields_for_enum<'ll, 'tcx>(
403
405
( variant_index, variant_name)
404
406
} ) ,
405
407
) ;
408
+ let visibility_flags = visibility_di_flags ( cx, enum_adt_def. did ( ) , enum_adt_def. did ( ) ) ;
406
409
407
410
let variant_field_infos: SmallVec < VariantFieldInfo < ' ll > > = variant_indices
408
411
. map ( |variant_index| {
@@ -417,6 +420,7 @@ fn build_union_fields_for_enum<'ll, 'tcx>(
417
420
variant_index,
418
421
variant_def,
419
422
variant_layout,
423
+ visibility_flags,
420
424
) ;
421
425
422
426
VariantFieldInfo {
@@ -437,6 +441,7 @@ fn build_union_fields_for_enum<'ll, 'tcx>(
437
441
tag_base_type,
438
442
tag_field,
439
443
untagged_variant_index,
444
+ visibility_flags,
440
445
)
441
446
}
442
447
@@ -744,6 +749,7 @@ fn build_union_fields_for_direct_tag_coroutine<'ll, 'tcx>(
744
749
tag_base_type,
745
750
tag_field,
746
751
None ,
752
+ DIFlags :: FlagZero ,
747
753
)
748
754
}
749
755
@@ -758,6 +764,7 @@ fn build_union_fields_for_direct_tag_enum_or_coroutine<'ll, 'tcx>(
758
764
tag_base_type : Ty < ' tcx > ,
759
765
tag_field : usize ,
760
766
untagged_variant_index : Option < VariantIdx > ,
767
+ di_flags : DIFlags ,
761
768
) -> SmallVec < & ' ll DIType > {
762
769
let tag_base_type_di_node = type_di_node ( cx, tag_base_type) ;
763
770
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>(
801
808
align. bits ( ) as u32 ,
802
809
// Union fields are always at offset zero
803
810
Size :: ZERO . bits ( ) ,
804
- DIFlags :: FlagZero ,
811
+ di_flags ,
805
812
variant_struct_type_wrapper,
806
813
)
807
814
}
@@ -835,7 +842,7 @@ fn build_union_fields_for_direct_tag_enum_or_coroutine<'ll, 'tcx>(
835
842
TAG_FIELD_NAME_128_LO ,
836
843
size_and_align,
837
844
lo_offset,
838
- DIFlags :: FlagZero ,
845
+ di_flags ,
839
846
type_di_node,
840
847
) ) ;
841
848
@@ -855,7 +862,7 @@ fn build_union_fields_for_direct_tag_enum_or_coroutine<'ll, 'tcx>(
855
862
TAG_FIELD_NAME ,
856
863
cx. size_and_align_of ( enum_type_and_layout. field ( cx, tag_field) . ty ) ,
857
864
enum_type_and_layout. fields . offset ( tag_field) ,
858
- DIFlags :: FlagZero ,
865
+ di_flags ,
859
866
tag_base_type_di_node,
860
867
) ) ;
861
868
}
0 commit comments