@@ -933,7 +933,7 @@ struct MemberDescription<'ll> {
933933 size : Size ,
934934 align : Align ,
935935 flags : DIFlags ,
936- discriminant : Option < u64 > ,
936+ discriminant : Option < u128 > ,
937937}
938938
939939// A factory for MemberDescriptions. It produces a list of member descriptions
@@ -1288,7 +1288,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
12881288 flags : DIFlags :: FlagZero ,
12891289 discriminant : Some ( self . layout . ty . ty_adt_def ( ) . unwrap ( )
12901290 . discriminant_for_variant ( cx. tcx , i)
1291- . val as u64 ) ,
1291+ . val as u128 ) ,
12921292 }
12931293 } ) . collect ( )
12941294 }
@@ -1842,6 +1842,7 @@ fn set_members_of_composite_type(cx: &CodegenCx<'ll, 'tcx>,
18421842 . into_iter ( )
18431843 . map ( |member_description| {
18441844 let member_name = CString :: new ( member_description. name ) . unwrap ( ) ;
1845+ let align = member_description. align . bits ( ) as u64 ;
18451846 unsafe {
18461847 Some ( llvm:: LLVMRustDIBuilderCreateVariantMemberType (
18471848 DIB ( cx) ,
@@ -1854,7 +1855,8 @@ fn set_members_of_composite_type(cx: &CodegenCx<'ll, 'tcx>,
18541855 member_description. offset . bits ( ) ,
18551856 match member_description. discriminant {
18561857 None => None ,
1857- Some ( value) => Some ( cx. const_u64 ( value) ) ,
1858+ Some ( value) =>
1859+ Some ( cx. const_uint_big ( cx. type_ix ( align) , value) ) ,
18581860 } ,
18591861 member_description. flags ,
18601862 member_description. type_metadata ) )
0 commit comments