authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-02-06 01:11:10+00:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2025-02-06 01:11:10+00:00
log75ec7d863efbba9dbb3eefa5e6607a5ef2fe8648
treed40cd118b642e99edea7500f943ed698f1b2745d
parent164700740b9530ffc7622f9b4c664278a7f68160
signaturelock-open Commit is signed but in an unrecognized format.

Sema: add missing `validateRuntimeValue` calls

Resolves: #13791

2 files changed, 16 insertions(+), 0 deletions(-)

src/Sema.zig+4
...@@ -29043,6 +29043,7 @@ fn elemValArray(...@@ -29043,6 +29043,7 @@ fn elemValArray(
29043 }29043 }
2904429044
29045 try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, array_ty, array_src);29045 try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, array_ty, array_src);
29046 try sema.validateRuntimeValue(block, array_src, array);
2904629047
29047 if (oob_safety and block.wantSafety()) {29048 if (oob_safety and block.wantSafety()) {
29048 // Runtime check is only needed if unable to comptime check.29049 // Runtime check is only needed if unable to comptime check.
...@@ -29107,6 +29108,7 @@ fn elemPtrArray(...@@ -29107,6 +29108,7 @@ fn elemPtrArray(
2910729108
29108 if (!init) {29109 if (!init) {
29109 try sema.validateRuntimeElemAccess(block, elem_index_src, array_ty.elemType2(zcu), array_ty, array_ptr_src);29110 try sema.validateRuntimeElemAccess(block, elem_index_src, array_ty.elemType2(zcu), array_ty, array_ptr_src);
29111 try sema.validateRuntimeValue(block, array_ptr_src, array_ptr);
29110 }29112 }
2911129113
29112 // Runtime check is only needed if unable to comptime check.29114 // Runtime check is only needed if unable to comptime check.
...@@ -29164,6 +29166,7 @@ fn elemValSlice(...@@ -29164,6 +29166,7 @@ fn elemValSlice(
29164 }29166 }
2916529167
29166 try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, slice_ty, slice_src);29168 try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ty, slice_ty, slice_src);
29169 try sema.validateRuntimeValue(block, slice_src, slice);
2916729170
29168 if (oob_safety and block.wantSafety()) {29171 if (oob_safety and block.wantSafety()) {
29169 const len_inst = if (maybe_slice_val) |slice_val|29172 const len_inst = if (maybe_slice_val) |slice_val|
...@@ -29220,6 +29223,7 @@ fn elemPtrSlice(...@@ -29220,6 +29223,7 @@ fn elemPtrSlice(
29220 }29223 }
2922129224
29222 try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ptr_ty, slice_ty, slice_src);29225 try sema.validateRuntimeElemAccess(block, elem_index_src, elem_ptr_ty, slice_ty, slice_src);
29226 try sema.validateRuntimeValue(block, slice_src, slice);
2922329227
29224 if (oob_safety and block.wantSafety()) {29228 if (oob_safety and block.wantSafety()) {
29225 const len_inst = len: {29229 const len_inst = len: {
test/cases/compile_errors/for_comptime_array_pointer.zig created+12
...@@ -0,0 +1,12 @@
1export fn foo() void {
2 comptime var elems: [3]u32 = undefined;
3 for (&elems) |*elem| {
4 _ = elem;
5 }
6}
7
8// error
9//
10// :3:10: error: runtime value contains reference to comptime var
11// :3:10: note: comptime var pointers are not available at runtime
12// :2:34: note: 'runtime_value' points to comptime var declared here