Properly sign extend array indexes. Closes #2468.

This commit is contained in:
Michael Sullivan 2012-05-30 17:09:52 -07:00
parent 1eebb1fe87
commit ea8d4d7f17

View File

@ -2521,7 +2521,9 @@ fn trans_index(cx: block, ex: @ast::expr, base: @ast::expr,
let ix_size = llsize_of_real(cx.ccx(), val_ty(ix.val));
let int_size = llsize_of_real(cx.ccx(), ccx.int_type);
let ix_val = if ix_size < int_size {
ZExt(bcx, ix.val, ccx.int_type)
if ty::type_is_signed(expr_ty(cx, idx)) {
SExt(bcx, ix.val, ccx.int_type)
} else { ZExt(bcx, ix.val, ccx.int_type) }
} else if ix_size > int_size {
Trunc(bcx, ix.val, ccx.int_type)
} else {