Commit f077c3c4cc

LemonBoy <thatlemon@gmail.com>
2019-12-20 09:44:10
Fix comptime evaluation of runtime array access
Fix #3951
1 parent 9daa7e1
Changed files (2)
src
test
stage1
behavior
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))
         {
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);
+}