diff --git a/src/Sema.zig b/src/Sema.zig index 5f92e12b04..0e16d92e65 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -29043,6 +29043,7 @@ fn elemValArray( } try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, array_ty, array_src); + try sema.validateRuntimeValue(block, array_src, array); if (oob_safety and block.wantSafety()) { // Runtime check is only needed if unable to comptime check. @@ -29107,6 +29108,7 @@ fn elemPtrArray( if (!init) { try sema.validateRuntimeElemAccess(block, elem_index_src, array_ty.elemType2(zcu), array_ty, array_ptr_src); + try sema.validateRuntimeValue(block, array_ptr_src, array_ptr); } // Runtime check is only needed if unable to comptime check. @@ -29164,6 +29166,7 @@ fn elemValSlice( } try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, slice_ty, slice_src); + try sema.validateRuntimeValue(block, slice_src, slice); if (oob_safety and block.wantSafety()) { const len_inst = if (maybe_slice_val) |slice_val| @@ -29220,6 +29223,7 @@ fn elemPtrSlice( } try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ptr_ty, slice_ty, slice_src); + try sema.validateRuntimeValue(block, slice_src, slice); if (oob_safety and block.wantSafety()) { const len_inst = len: { diff --git a/test/cases/compile_errors/for_comptime_array_pointer.zig b/test/cases/compile_errors/for_comptime_array_pointer.zig new file mode 100644 index 0000000000..48f461cf42 --- /dev/null +++ b/test/cases/compile_errors/for_comptime_array_pointer.zig @@ -0,0 +1,12 @@ +export fn foo() void { + comptime var elems: [3]u32 = undefined; + for (&elems) |*elem| { + _ = elem; + } +} + +// error +// +// :3:10: error: runtime value contains reference to comptime var +// :3:10: note: comptime var pointers are not available at runtime +// :2:34: note: 'runtime_value' points to comptime var declared here