From 2b2f983523e6ca12889cd319cf32f558d79cdfd6 Mon Sep 17 00:00:00 2001 From: Simonas Kazlauskas Date: Sat, 19 Dec 2015 20:28:12 +0200 Subject: [PATCH] Fix GEPs for MIR indexing translation Fixes #30474 --- src/librustc_trans/trans/mir/lvalue.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/librustc_trans/trans/mir/lvalue.rs b/src/librustc_trans/trans/mir/lvalue.rs index f3c2c345979..b167633909a 100644 --- a/src/librustc_trans/trans/mir/lvalue.rs +++ b/src/librustc_trans/trans/mir/lvalue.rs @@ -132,7 +132,8 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> { mir::ProjectionElem::Index(ref index) => { let index = self.trans_operand(bcx, index); let llindex = self.prepare_index(bcx, index.immediate()); - (build::InBoundsGEP(bcx, tr_base.llval, &[llindex]), + let zero = common::C_uint(bcx.ccx(), 0u64); + (build::InBoundsGEP(bcx, tr_base.llval, &[zero, llindex]), ptr::null_mut()) } mir::ProjectionElem::ConstantIndex { offset, @@ -140,7 +141,8 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> { min_length: _ } => { let lloffset = common::C_u32(bcx.ccx(), offset); let llindex = self.prepare_index(bcx, lloffset); - (build::InBoundsGEP(bcx, tr_base.llval, &[llindex]), + let zero = common::C_uint(bcx.ccx(), 0u64); + (build::InBoundsGEP(bcx, tr_base.llval, &[zero, llindex]), ptr::null_mut()) } mir::ProjectionElem::ConstantIndex { offset, @@ -150,7 +152,8 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> { let lllen = self.lvalue_len(bcx, tr_base); let llindex = build::Sub(bcx, lllen, lloffset, DebugLoc::None); let llindex = self.prepare_index(bcx, llindex); - (build::InBoundsGEP(bcx, tr_base.llval, &[llindex]), + let zero = common::C_uint(bcx.ccx(), 0u64); + (build::InBoundsGEP(bcx, tr_base.llval, &[zero, llindex]), ptr::null_mut()) } mir::ProjectionElem::Downcast(..) => {