diff --git a/src/ir.cpp b/src/ir.cpp index bc16cef561..0c7160fa80 100644 --- 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 index 1dd07c8986..e1004243fc 100644 --- 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); +}