@@ -3819,10 +3819,13 @@ fn trans_index(@block_ctxt cx, &ast.span sp, @ast.expr base,
3819
3819
ix_val = ix. val;
3820
3820
}
3821
3821
3822
- auto unit_sz = size_of( bcx, node_ann_type( cx. fcx. ccx, ann) ) ;
3822
+ auto unit_ty = node_ann_type( cx. fcx. ccx, ann) ;
3823
+ auto unit_sz = size_of( bcx, unit_ty) ;
3823
3824
bcx = unit_sz. bcx;
3825
+ llvm. LLVMSetValueName ( unit_sz. val, _str. buf( "unit_sz") ) ;
3824
3826
3825
3827
auto scaled_ix = bcx. build. Mul ( ix_val, unit_sz. val) ;
3828
+ llvm. LLVMSetValueName ( scaled_ix, _str. buf( "scaled_ix") ) ;
3826
3829
3827
3830
auto lim = bcx. build. GEP ( v, vec( C_int ( 0 ) , C_int ( abi. vec_elt_fill) ) ) ;
3828
3831
lim = bcx. build. Load ( lim) ;
@@ -3839,7 +3842,14 @@ fn trans_index(@block_ctxt cx, &ast.span sp, @ast.expr base,
3839
3842
fail_res. bcx. build. Br ( next_cx. llbb) ;
3840
3843
3841
3844
auto body = next_cx. build. GEP ( v, vec( C_int ( 0 ) , C_int ( abi. vec_elt_data) ) ) ;
3842
- auto elt = next_cx. build. GEP ( body, vec( C_int ( 0 ) , ix_val) ) ;
3845
+ auto elt;
3846
+ if ( ty. type_has_dynamic_size( unit_ty) ) {
3847
+ body = next_cx. build. PointerCast ( body, T_ptr ( T_array ( T_i8 ( ) , 0 u) ) ) ;
3848
+ elt = next_cx. build. GEP ( body, vec( C_int ( 0 ) , scaled_ix) ) ;
3849
+ } else {
3850
+ elt = next_cx. build. GEP ( body, vec( C_int ( 0 ) , ix_val) ) ;
3851
+ }
3852
+
3843
3853
ret lval_mem( next_cx, elt) ;
3844
3854
}
3845
3855
0 commit comments