@@ -338,7 +338,7 @@ fn fixed_vec_metadata(
338338
339339 return_if_metadata_created_in_meantime ! ( cx, unique_type_id) ;
340340
341- let ( size , align ) = cx. size_and_align_of ( array_or_slice_type) ;
341+ let mem_pos = cx. mem_pos_of ( array_or_slice_type) ;
342342
343343 let upper_bound = match array_or_slice_type. kind {
344344 ty:: Array ( _, len) => len. eval_usize ( cx. tcx , ty:: ParamEnv :: reveal_all ( ) ) as c_longlong ,
@@ -353,8 +353,8 @@ fn fixed_vec_metadata(
353353 let metadata = unsafe {
354354 llvm:: LLVMRustDIBuilderCreateArrayType (
355355 DIB ( cx) ,
356- size. bits ( ) ,
357- align. bits ( ) as u32 ,
356+ mem_pos . size . bits ( ) ,
357+ mem_pos . align . bits ( ) as u32 ,
358358 element_type_metadata,
359359 subscripts)
360360 } ;
@@ -377,23 +377,24 @@ fn vec_slice_metadata(
377377
378378 let slice_type_name = compute_debuginfo_type_name ( cx. tcx , slice_ptr_type, true ) ;
379379
380- let ( pointer_size, pointer_align) = cx. size_and_align_of ( data_ptr_type) ;
381- let ( usize_size, usize_align) = cx. size_and_align_of ( cx. tcx . types . usize ) ;
380+ let pointer_mem_pos = cx. mem_pos_of ( data_ptr_type) ;
381+ let usize_mem_pos = cx. mem_pos_of ( cx. tcx . types . usize ) ;
382+ let pointer_stride = pointer_mem_pos. stride_to ( usize_mem_pos. align ) . size ;
382383
383384 let member_descriptions = vec ! [
384385 MemberDescription {
385386 name: "data_ptr" . to_owned( ) ,
386387 type_metadata: data_ptr_metadata,
387388 offset: Size :: ZERO ,
388- mem_pos: MemoryPosition :: new ( pointer_size , pointer_align ) ,
389+ mem_pos: pointer_mem_pos ,
389390 flags: DIFlags :: FlagZero ,
390391 discriminant: None ,
391392 } ,
392393 MemberDescription {
393394 name: "length" . to_owned( ) ,
394395 type_metadata: type_metadata( cx, cx. tcx. types. usize , span) ,
395- offset: pointer_size ,
396- mem_pos: MemoryPosition :: new ( usize_size , usize_align ) ,
396+ offset: pointer_stride ,
397+ mem_pos: usize_mem_pos ,
397398 flags: DIFlags :: FlagZero ,
398399 discriminant: None ,
399400 } ,
@@ -652,7 +653,8 @@ pub fn type_metadata(
652653 // anything reading the debuginfo for a recursive
653654 // type is going to see *somthing* weird - the only
654655 // question is what exactly it will see
655- let ( size, align) = cx. size_and_align_of ( t) ;
656+ let mem_pos = cx. mem_pos_of ( t) ;
657+ let ( size, align) = ( mem_pos. size , mem_pos. align ) ;
656658 llvm:: LLVMRustDIBuilderCreateBasicType (
657659 DIB ( cx) ,
658660 SmallCStr :: new ( "<recur_type>" ) . as_ptr ( ) ,
@@ -850,7 +852,8 @@ fn basic_type_metadata(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType {
850852 _ => bug ! ( "debuginfo::basic_type_metadata - t is invalid type" )
851853 } ;
852854
853- let ( size, align) = cx. size_and_align_of ( t) ;
855+ let mem_pos = cx. mem_pos_of ( t) ;
856+ let ( size, align) = ( mem_pos. size , mem_pos. align ) ;
854857 let name = SmallCStr :: new ( name) ;
855858 let ty_metadata = unsafe {
856859 llvm:: LLVMRustDIBuilderCreateBasicType (
@@ -880,15 +883,15 @@ fn pointer_type_metadata(
880883 pointer_type : Ty < ' tcx > ,
881884 pointee_type_metadata : & ' ll DIType ,
882885) -> & ' ll DIType {
883- let ( pointer_size , pointer_align ) = cx. size_and_align_of ( pointer_type) ;
886+ let pointer_mem_pos = cx. mem_pos_of ( pointer_type) ;
884887 let name = compute_debuginfo_type_name ( cx. tcx , pointer_type, false ) ;
885888 let name = SmallCStr :: new ( & name) ;
886889 unsafe {
887890 llvm:: LLVMRustDIBuilderCreatePointerType (
888891 DIB ( cx) ,
889892 pointee_type_metadata,
890- pointer_size . bits ( ) ,
891- pointer_align . bits ( ) as u32 ,
893+ pointer_mem_pos . size . bits ( ) ,
894+ pointer_mem_pos . align . bits ( ) as u32 ,
892895 name. as_ptr ( ) )
893896 }
894897}
@@ -1183,12 +1186,12 @@ impl<'tcx> TupleMemberDescriptionFactory<'tcx> {
11831186 -> Vec < MemberDescription < ' ll > > {
11841187 let layout = cx. layout_of ( self . ty ) ;
11851188 self . component_types . iter ( ) . enumerate ( ) . map ( |( i, & component_type) | {
1186- let ( size , align ) = cx. size_and_align_of ( component_type) ;
1189+ let mem_pos = cx. mem_pos_of ( component_type) ;
11871190 MemberDescription {
11881191 name : format ! ( "__{}" , i) ,
11891192 type_metadata : type_metadata ( cx, component_type, self . span ) ,
11901193 offset : layout. fields . offset ( i) ,
1191- mem_pos : MemoryPosition :: new ( size , align ) ,
1194+ mem_pos,
11921195 flags : DIFlags :: FlagZero ,
11931196 discriminant : None ,
11941197 }
@@ -1567,7 +1570,7 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
15671570 fn create_member_descriptions ( & self , cx : & CodegenCx < ' ll , ' tcx > )
15681571 -> Vec < MemberDescription < ' ll > > {
15691572 self . args . iter ( ) . enumerate ( ) . map ( |( i, & ( ref name, ty) ) | {
1570- let ( size , align ) = cx. size_and_align_of ( ty) ;
1573+ let mem_pos = cx. mem_pos_of ( ty) ;
15711574 MemberDescription {
15721575 name : name. to_string ( ) ,
15731576 type_metadata : if use_enum_fallback ( cx) {
@@ -1581,7 +1584,7 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
15811584 type_metadata ( cx, ty, self . span )
15821585 } ,
15831586 offset : self . offsets [ i] ,
1584- mem_pos : MemoryPosition :: new ( size , align ) ,
1587+ mem_pos,
15851588 flags : DIFlags :: FlagZero ,
15861589 discriminant : None ,
15871590 }
@@ -1919,7 +1922,9 @@ fn prepare_enum_metadata(
19191922 ..
19201923 } => {
19211924 let discr_type = discr. value . to_ty ( cx. tcx ) ;
1922- let ( size, align) = cx. size_and_align_of ( discr_type) ;
1925+ let mem_pos = cx. mem_pos_of ( discr_type) ;
1926+ let ( size, align) = ( mem_pos. size , mem_pos. align ) ;
1927+
19231928
19241929 let discr_metadata = basic_type_metadata ( cx, discr_type) ;
19251930 unsafe {
@@ -2131,7 +2136,8 @@ fn create_struct_stub(
21312136 unique_type_id : UniqueTypeId ,
21322137 containing_scope : Option < & ' ll DIScope > ,
21332138) -> & ' ll DICompositeType {
2134- let ( struct_size, struct_align) = cx. size_and_align_of ( struct_type) ;
2139+ let struct_mem_pos = cx. mem_pos_of ( struct_type) ;
2140+ let ( struct_size, struct_align) = ( struct_mem_pos. size , struct_mem_pos. align ) ;
21352141
21362142 let name = SmallCStr :: new ( struct_type_name) ;
21372143 let unique_type_id = SmallCStr :: new (
@@ -2169,7 +2175,7 @@ fn create_union_stub(
21692175 unique_type_id : UniqueTypeId ,
21702176 containing_scope : & ' ll DIScope ,
21712177) -> & ' ll DICompositeType {
2172- let ( union_size , union_align ) = cx. size_and_align_of ( union_type) ;
2178+ let union_mem_pos = cx. mem_pos_of ( union_type) ;
21732179
21742180 let name = SmallCStr :: new ( union_type_name) ;
21752181 let unique_type_id = SmallCStr :: new (
@@ -2187,8 +2193,8 @@ fn create_union_stub(
21872193 name. as_ptr ( ) ,
21882194 unknown_file_metadata ( cx) ,
21892195 UNKNOWN_LINE_NUMBER ,
2190- union_size . bits ( ) ,
2191- union_align . bits ( ) as u32 ,
2196+ union_mem_pos . size . bits ( ) ,
2197+ union_mem_pos . align . bits ( ) as u32 ,
21922198 DIFlags :: FlagZero ,
21932199 Some ( empty_array) ,
21942200 0 , // RuntimeLang
0 commit comments