zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit f077c3c4ccd03f48f785ee812ab2c88c85792014 (tree)
parent 9daa7e1e193a693b4415d3db8031633236f28876
Author: LemonBoy <thatlemon@gmail.com>
Date:   Fri, 20 Dec 2019 09:44:10 +0100

Fix comptime evaluation of runtime array access

Fix #3951

Diffstat:
Msrc/ir.cpp | 1+
Mtest/stage1/behavior/pointers.zig | 6++++++
2 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/src/ir.cpp b/src/ir.cpp @@ -19500,6 +19500,7 @@ static IrInstruction *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstruct } if (orig_array_ptr_val->special != ConstValSpecialRuntime && + orig_array_ptr_val->data.x_ptr.special != ConstPtrSpecialHardCodedAddr && (orig_array_ptr_val->data.x_ptr.mut != ConstPtrMutRuntimeVar || array_type->id == ZigTypeIdArray)) { diff --git a/test/stage1/behavior/pointers.zig b/test/stage1/behavior/pointers.zig @@ -282,3 +282,9 @@ test "pointer sentinel with +inf" { S.doTheTest(); comptime S.doTheTest(); } + +test "pointer to array at fixed address" { + const array = @intToPtr(*volatile [1]u32, 0x10); + // Silly check just to reference `array` + expect(@ptrToInt(&array[0]) == 0x10); +}