authorgravatar for 14938807+xackus@users.noreply.github.comxackus <14938807+xackus@users.noreply.github.com> 2020-04-06 09:44:06+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-04-07 18:22:17-04:00
log66b2477ab668447c6cbff68770de14ec8db991be
tree8d034ec7f295fca8fb8a79cb89d9f957f97adf0c
parented23dad4877cd93fd684852b17e0e554ef71e297

fix lazy value in ir_analyze_instruction_elem_ptr


3 files changed, 14 insertions(+), 1 deletions(-)

src/ir.cpp+5-1
......@@ -21149,7 +21149,11 @@ static IrInstGen *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstSrcElemP
2114921149
2115021150 bool safety_check_on = elem_ptr_instruction->safety_check_on;
2115121151 if (instr_is_comptime(casted_elem_index)) {
21152 uint64_t index = bigint_as_u64(&casted_elem_index->value->data.x_bigint);
21152 ZigValue *index_val = ir_resolve_const(ira, casted_elem_index, UndefBad);
21153 if (index_val == nullptr)
21154 return ira->codegen->invalid_inst_gen;
21155 uint64_t index = bigint_as_u64(&index_val->data.x_bigint);
21156
2115321157 if (array_type->id == ZigTypeIdArray) {
2115421158 uint64_t array_len = array_type->data.array.len +
2115521159 (array_type->data.array.sentinel != nullptr);
test/stage1/behavior.zig+1
......@@ -44,6 +44,7 @@ comptime {
4444 _ = @import("behavior/bugs/4769_a.zig");
4545 _ = @import("behavior/bugs/4769_b.zig");
4646 _ = @import("behavior/bugs/4769_c.zig");
47 _ = @import("behavior/bugs/4954.zig");
4748 _ = @import("behavior/bugs/394.zig");
4849 _ = @import("behavior/bugs/421.zig");
4950 _ = @import("behavior/bugs/529.zig");
test/stage1/behavior/bugs/4954.zig created+8
......@@ -0,0 +1,8 @@
1fn f(buf: []u8) void {
2 var ptr = &buf[@sizeOf(u32)];
3}
4
5test "crash" {
6 var buf: [4096]u8 = undefined;
7 f(&buf);
8}