@@ -497,9 +497,10 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
497497 OperandValue :: Immediate ( self . to_immediate ( llval, place. layout ) )
498498 } else if let abi:: Abi :: ScalarPair ( ref a, ref b) = place. layout . abi {
499499 let b_offset = a. value . size ( self ) . align_to ( b. value . align ( self ) . abi ) ;
500+ let pair_ty = place. layout . llvm_type ( self ) ;
500501
501502 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 ) ;
503504 let llty = place. layout . scalar_pair_element_llvm_type ( self , i, false ) ;
504505 let load = self . load ( llty, llptr, align) ;
505506 scalar_load_metadata ( self , load, scalar) ;
@@ -663,9 +664,9 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
663664 }
664665 }
665666
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 {
667668 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 ) }
669670 }
670671
671672 /* Casts */
0 commit comments