Commit 66b2477ab6
Changed files (3)
src
test
stage1
behavior
bugs
src/ir.cpp
@@ -21149,7 +21149,11 @@ static IrInstGen *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstSrcElemP
bool safety_check_on = elem_ptr_instruction->safety_check_on;
if (instr_is_comptime(casted_elem_index)) {
- uint64_t index = bigint_as_u64(&casted_elem_index->value->data.x_bigint);
+ ZigValue *index_val = ir_resolve_const(ira, casted_elem_index, UndefBad);
+ if (index_val == nullptr)
+ return ira->codegen->invalid_inst_gen;
+ uint64_t index = bigint_as_u64(&index_val->data.x_bigint);
+
if (array_type->id == ZigTypeIdArray) {
uint64_t array_len = array_type->data.array.len +
(array_type->data.array.sentinel != nullptr);
test/stage1/behavior/bugs/4954.zig
@@ -0,0 +1,8 @@
+fn f(buf: []u8) void {
+ var ptr = &buf[@sizeOf(u32)];
+}
+
+test "crash" {
+ var buf: [4096]u8 = undefined;
+ f(&buf);
+}
test/stage1/behavior.zig
@@ -44,6 +44,7 @@ comptime {
_ = @import("behavior/bugs/4769_a.zig");
_ = @import("behavior/bugs/4769_b.zig");
_ = @import("behavior/bugs/4769_c.zig");
+ _ = @import("behavior/bugs/4954.zig");
_ = @import("behavior/bugs/394.zig");
_ = @import("behavior/bugs/421.zig");
_ = @import("behavior/bugs/529.zig");