@@ -4,7 +4,7 @@ use crate::type_of::LayoutLlvmExt;
44use crate :: value:: Value ;
55use rustc_codegen_ssa:: mir:: operand:: OperandRef ;
66use 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 } ;
88use rustc:: ty:: Ty ;
99
1010#[ allow( dead_code) ]
@@ -24,8 +24,7 @@ fn emit_direct_ptr_va_arg(
2424 bx : & mut Builder < ' a , ' ll , ' tcx > ,
2525 list : OperandRef < ' tcx , & ' ll Value > ,
2626 llty : & ' ll Type ,
27- size : Size ,
28- align : Align ,
27+ mem_pos : MemoryPosition ,
2928 slot_size : Align ,
3029 allow_higher_align : bool
3130) -> ( & ' ll Value , Align ) {
@@ -38,21 +37,21 @@ fn emit_direct_ptr_va_arg(
3837
3938 let ptr = bx. load ( va_list_addr, bx. tcx ( ) . data_layout . pointer_pos . align . abi ) ;
4039
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 )
4342 } else {
4443 ( ptr, slot_size)
4544 } ;
4645
4746
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 ;
4948 let full_direct_size = bx. cx ( ) . const_i32 ( aligned_size) ;
5049 let next = bx. inbounds_gep ( addr, & [ full_direct_size] ) ;
5150 bx. store ( next, va_list_addr, bx. tcx ( ) . data_layout . pointer_pos . align . abi ) ;
5251
53- if size. bytes ( ) < slot_size. bytes ( ) &&
52+ if mem_pos . size . bytes ( ) < slot_size. bytes ( ) &&
5453 & * 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 ) ;
5655 let adjusted = bx. inbounds_gep ( addr, & [ adjusted_size] ) ;
5756 ( bx. bitcast ( adjusted, bx. cx ( ) . type_ptr_to ( llty) ) , addr_align)
5857 } else {
@@ -69,20 +68,18 @@ fn emit_ptr_va_arg(
6968 allow_higher_align : bool
7069) -> & ' ll Value {
7170 let layout = bx. cx . layout_of ( target_ty) ;
72- let ( llty, size , align ) = if indirect {
71+ let ( llty, pref_pos ) = if indirect {
7372 ( 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 )
7674 } else {
7775 ( layout. llvm_type ( bx. cx ) ,
78- layout. pref_pos . size ,
79- layout. pref_pos . align )
76+ layout. pref_pos )
8077 } ;
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 ( ) ,
8279 slot_size, allow_higher_align) ;
8380 if indirect {
8481 let tmp_ret = bx. load ( addr, addr_align) ;
85- bx. load ( tmp_ret, align. abi )
82+ bx. load ( tmp_ret, pref_pos . align . abi )
8683 } else {
8784 bx. load ( addr, addr_align)
8885 }
0 commit comments