@@ -338,7 +338,7 @@ fn fixed_vec_metadata(
338
338
339
339
return_if_metadata_created_in_meantime ! ( cx, unique_type_id) ;
340
340
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) ;
342
342
343
343
let upper_bound = match array_or_slice_type. kind {
344
344
ty:: Array ( _, len) => len. eval_usize ( cx. tcx , ty:: ParamEnv :: reveal_all ( ) ) as c_longlong ,
@@ -353,8 +353,8 @@ fn fixed_vec_metadata(
353
353
let metadata = unsafe {
354
354
llvm:: LLVMRustDIBuilderCreateArrayType (
355
355
DIB ( cx) ,
356
- size. bits ( ) ,
357
- align. bits ( ) as u32 ,
356
+ mem_pos . size . bits ( ) ,
357
+ mem_pos . align . bits ( ) as u32 ,
358
358
element_type_metadata,
359
359
subscripts)
360
360
} ;
@@ -377,23 +377,24 @@ fn vec_slice_metadata(
377
377
378
378
let slice_type_name = compute_debuginfo_type_name ( cx. tcx , slice_ptr_type, true ) ;
379
379
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 ;
382
383
383
384
let member_descriptions = vec ! [
384
385
MemberDescription {
385
386
name: "data_ptr" . to_owned( ) ,
386
387
type_metadata: data_ptr_metadata,
387
388
offset: Size :: ZERO ,
388
- mem_pos: MemoryPosition :: new ( pointer_size , pointer_align ) ,
389
+ mem_pos: pointer_mem_pos ,
389
390
flags: DIFlags :: FlagZero ,
390
391
discriminant: None ,
391
392
} ,
392
393
MemberDescription {
393
394
name: "length" . to_owned( ) ,
394
395
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 ,
397
398
flags: DIFlags :: FlagZero ,
398
399
discriminant: None ,
399
400
} ,
@@ -652,7 +653,8 @@ pub fn type_metadata(
652
653
// anything reading the debuginfo for a recursive
653
654
// type is going to see *somthing* weird - the only
654
655
// 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 ) ;
656
658
llvm:: LLVMRustDIBuilderCreateBasicType (
657
659
DIB ( cx) ,
658
660
SmallCStr :: new ( "<recur_type>" ) . as_ptr ( ) ,
@@ -850,7 +852,8 @@ fn basic_type_metadata(cx: &CodegenCx<'ll, 'tcx>, t: Ty<'tcx>) -> &'ll DIType {
850
852
_ => bug ! ( "debuginfo::basic_type_metadata - t is invalid type" )
851
853
} ;
852
854
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 ) ;
854
857
let name = SmallCStr :: new ( name) ;
855
858
let ty_metadata = unsafe {
856
859
llvm:: LLVMRustDIBuilderCreateBasicType (
@@ -880,15 +883,15 @@ fn pointer_type_metadata(
880
883
pointer_type : Ty < ' tcx > ,
881
884
pointee_type_metadata : & ' ll DIType ,
882
885
) -> & ' 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) ;
884
887
let name = compute_debuginfo_type_name ( cx. tcx , pointer_type, false ) ;
885
888
let name = SmallCStr :: new ( & name) ;
886
889
unsafe {
887
890
llvm:: LLVMRustDIBuilderCreatePointerType (
888
891
DIB ( cx) ,
889
892
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 ,
892
895
name. as_ptr ( ) )
893
896
}
894
897
}
@@ -1183,12 +1186,12 @@ impl<'tcx> TupleMemberDescriptionFactory<'tcx> {
1183
1186
-> Vec < MemberDescription < ' ll > > {
1184
1187
let layout = cx. layout_of ( self . ty ) ;
1185
1188
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) ;
1187
1190
MemberDescription {
1188
1191
name : format ! ( "__{}" , i) ,
1189
1192
type_metadata : type_metadata ( cx, component_type, self . span ) ,
1190
1193
offset : layout. fields . offset ( i) ,
1191
- mem_pos : MemoryPosition :: new ( size , align ) ,
1194
+ mem_pos,
1192
1195
flags : DIFlags :: FlagZero ,
1193
1196
discriminant : None ,
1194
1197
}
@@ -1567,7 +1570,7 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
1567
1570
fn create_member_descriptions ( & self , cx : & CodegenCx < ' ll , ' tcx > )
1568
1571
-> Vec < MemberDescription < ' ll > > {
1569
1572
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) ;
1571
1574
MemberDescription {
1572
1575
name : name. to_string ( ) ,
1573
1576
type_metadata : if use_enum_fallback ( cx) {
@@ -1581,7 +1584,7 @@ impl VariantMemberDescriptionFactory<'ll, 'tcx> {
1581
1584
type_metadata ( cx, ty, self . span )
1582
1585
} ,
1583
1586
offset : self . offsets [ i] ,
1584
- mem_pos : MemoryPosition :: new ( size , align ) ,
1587
+ mem_pos,
1585
1588
flags : DIFlags :: FlagZero ,
1586
1589
discriminant : None ,
1587
1590
}
@@ -1919,7 +1922,9 @@ fn prepare_enum_metadata(
1919
1922
..
1920
1923
} => {
1921
1924
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
+
1923
1928
1924
1929
let discr_metadata = basic_type_metadata ( cx, discr_type) ;
1925
1930
unsafe {
@@ -2131,7 +2136,8 @@ fn create_struct_stub(
2131
2136
unique_type_id : UniqueTypeId ,
2132
2137
containing_scope : Option < & ' ll DIScope > ,
2133
2138
) -> & ' 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 ) ;
2135
2141
2136
2142
let name = SmallCStr :: new ( struct_type_name) ;
2137
2143
let unique_type_id = SmallCStr :: new (
@@ -2169,7 +2175,7 @@ fn create_union_stub(
2169
2175
unique_type_id : UniqueTypeId ,
2170
2176
containing_scope : & ' ll DIScope ,
2171
2177
) -> & ' 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) ;
2173
2179
2174
2180
let name = SmallCStr :: new ( union_type_name) ;
2175
2181
let unique_type_id = SmallCStr :: new (
@@ -2187,8 +2193,8 @@ fn create_union_stub(
2187
2193
name. as_ptr ( ) ,
2188
2194
unknown_file_metadata ( cx) ,
2189
2195
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 ,
2192
2198
DIFlags :: FlagZero ,
2193
2199
Some ( empty_array) ,
2194
2200
0 , // RuntimeLang
0 commit comments