@@ -4,7 +4,7 @@ use crate::type_of::LayoutLlvmExt;
4
4
use crate :: value:: Value ;
5
5
use rustc_codegen_ssa:: mir:: operand:: OperandRef ;
6
6
use rustc_codegen_ssa:: traits:: { BaseTypeMethods , BuilderMethods , ConstMethods , DerivedTypeMethods } ;
7
- use rustc:: ty:: layout:: { Align , HasDataLayout , HasTyCtxt , LayoutOf , Size } ;
7
+ use rustc:: ty:: layout:: { Align , HasDataLayout , HasTyCtxt , LayoutOf , MemoryPosition } ;
8
8
use rustc:: ty:: Ty ;
9
9
10
10
#[ allow( dead_code) ]
@@ -24,8 +24,7 @@ fn emit_direct_ptr_va_arg(
24
24
bx : & mut Builder < ' a , ' ll , ' tcx > ,
25
25
list : OperandRef < ' tcx , & ' ll Value > ,
26
26
llty : & ' ll Type ,
27
- size : Size ,
28
- align : Align ,
27
+ mem_pos : MemoryPosition ,
29
28
slot_size : Align ,
30
29
allow_higher_align : bool
31
30
) -> ( & ' ll Value , Align ) {
@@ -38,21 +37,21 @@ fn emit_direct_ptr_va_arg(
38
37
39
38
let ptr = bx. load ( va_list_addr, bx. tcx ( ) . data_layout . pointer_pos . align . abi ) ;
40
39
41
- let ( addr, addr_align) = if allow_higher_align && align > slot_size {
42
- ( round_pointer_up_to_alignment ( bx, ptr, align, bx. cx ( ) . type_i8p ( ) ) , align)
40
+ let ( addr, addr_align) = if allow_higher_align && mem_pos . align > slot_size {
41
+ ( round_pointer_up_to_alignment ( bx, ptr, mem_pos . align , bx. cx ( ) . type_i8p ( ) ) , mem_pos . align )
43
42
} else {
44
43
( ptr, slot_size)
45
44
} ;
46
45
47
46
48
- let aligned_size = size. align_to ( slot_size) . bytes ( ) as i32 ;
47
+ let aligned_size = mem_pos . size . align_to ( slot_size) . bytes ( ) as i32 ;
49
48
let full_direct_size = bx. cx ( ) . const_i32 ( aligned_size) ;
50
49
let next = bx. inbounds_gep ( addr, & [ full_direct_size] ) ;
51
50
bx. store ( next, va_list_addr, bx. tcx ( ) . data_layout . pointer_pos . align . abi ) ;
52
51
53
- if size. bytes ( ) < slot_size. bytes ( ) &&
52
+ if mem_pos . size . bytes ( ) < slot_size. bytes ( ) &&
54
53
& * bx. tcx ( ) . sess . target . target . target_endian == "big" {
55
- let adjusted_size = bx. cx ( ) . const_i32 ( ( slot_size. bytes ( ) - size. bytes ( ) ) as i32 ) ;
54
+ let adjusted_size = bx. cx ( ) . const_i32 ( ( slot_size. bytes ( ) - mem_pos . size . bytes ( ) ) as i32 ) ;
56
55
let adjusted = bx. inbounds_gep ( addr, & [ adjusted_size] ) ;
57
56
( bx. bitcast ( adjusted, bx. cx ( ) . type_ptr_to ( llty) ) , addr_align)
58
57
} else {
@@ -69,20 +68,18 @@ fn emit_ptr_va_arg(
69
68
allow_higher_align : bool
70
69
) -> & ' ll Value {
71
70
let layout = bx. cx . layout_of ( target_ty) ;
72
- let ( llty, size , align ) = if indirect {
71
+ let ( llty, pref_pos ) = if indirect {
73
72
( bx. cx . layout_of ( bx. cx . tcx . mk_imm_ptr ( target_ty) ) . llvm_type ( bx. cx ) ,
74
- bx. cx . data_layout ( ) . pointer_pos . size ,
75
- bx. cx . data_layout ( ) . pointer_pos . align )
73
+ bx. cx . data_layout ( ) . pointer_pos )
76
74
} else {
77
75
( layout. llvm_type ( bx. cx ) ,
78
- layout. pref_pos . size ,
79
- layout. pref_pos . align )
76
+ layout. pref_pos )
80
77
} ;
81
- let ( addr, addr_align) = emit_direct_ptr_va_arg ( bx, list, llty, size , align . abi ,
78
+ let ( addr, addr_align) = emit_direct_ptr_va_arg ( bx, list, llty, pref_pos . mem_pos ( ) ,
82
79
slot_size, allow_higher_align) ;
83
80
if indirect {
84
81
let tmp_ret = bx. load ( addr, addr_align) ;
85
- bx. load ( tmp_ret, align. abi )
82
+ bx. load ( tmp_ret, pref_pos . align . abi )
86
83
} else {
87
84
bx. load ( addr, addr_align)
88
85
}
0 commit comments