@@ -497,9 +497,10 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
497
497
OperandValue :: Immediate ( self . to_immediate ( llval, place. layout ) )
498
498
} else if let abi:: Abi :: ScalarPair ( ref a, ref b) = place. layout . abi {
499
499
let b_offset = a. value . size ( self ) . align_to ( b. value . align ( self ) . abi ) ;
500
+ let pair_ty = place. layout . llvm_type ( self ) ;
500
501
501
502
let mut load = |i, scalar : & abi:: Scalar , align| {
502
- let llptr = self . struct_gep ( place. llval , i as u64 ) ;
503
+ let llptr = self . struct_gep ( pair_ty , place. llval , i as u64 ) ;
503
504
let llty = place. layout . scalar_pair_element_llvm_type ( self , i, false ) ;
504
505
let load = self . load ( llty, llptr, align) ;
505
506
scalar_load_metadata ( self , load, scalar) ;
@@ -663,9 +664,9 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
663
664
}
664
665
}
665
666
666
- fn struct_gep ( & mut self , ptr : & ' ll Value , idx : u64 ) -> & ' ll Value {
667
+ fn struct_gep ( & mut self , ty : & ' ll Type , ptr : & ' ll Value , idx : u64 ) -> & ' ll Value {
667
668
assert_eq ! ( idx as c_uint as u64 , idx) ;
668
- unsafe { llvm:: LLVMBuildStructGEP ( self . llbuilder , ptr, idx as c_uint , UNNAMED ) }
669
+ unsafe { llvm:: LLVMBuildStructGEP2 ( self . llbuilder , ty , ptr, idx as c_uint , UNNAMED ) }
669
670
}
670
671
671
672
/* Casts */
0 commit comments