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...@@ -21149,7 +21149,11 @@ static IrInstGen *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstSrcElemP
2114921149
21150 bool safety_check_on = elem_ptr_instruction->safety_check_on;21150 bool safety_check_on = elem_ptr_instruction->safety_check_on;
21151 if (instr_is_comptime(casted_elem_index)) {21151 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
21153 if (array_type->id == ZigTypeIdArray) {21157 if (array_type->id == ZigTypeIdArray) {
21154 uint64_t array_len = array_type->data.array.len +21158 uint64_t array_len = array_type->data.array.len +
21155 (array_type->data.array.sentinel != nullptr);21159 (array_type->data.array.sentinel != nullptr);
test/stage1/behavior.zig+1
...@@ -44,6 +44,7 @@ comptime {...@@ -44,6 +44,7 @@ comptime {
44 _ = @import("behavior/bugs/4769_a.zig");44 _ = @import("behavior/bugs/4769_a.zig");
45 _ = @import("behavior/bugs/4769_b.zig");45 _ = @import("behavior/bugs/4769_b.zig");
46 _ = @import("behavior/bugs/4769_c.zig");46 _ = @import("behavior/bugs/4769_c.zig");
47 _ = @import("behavior/bugs/4954.zig");
47 _ = @import("behavior/bugs/394.zig");48 _ = @import("behavior/bugs/394.zig");
48 _ = @import("behavior/bugs/421.zig");49 _ = @import("behavior/bugs/421.zig");
49 _ = @import("behavior/bugs/529.zig");50 _ = @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}