diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-09-09 21:36:08 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-09-15 00:50:18 +0300 |
| commit | 5e37da6ade7eb307d51c21a2dfcdbef23e9cbf08 (patch) | |
| tree | a4549f045d0c87d67519eb1045d3ddccf84d9751 /test | |
| parent | bf4a3df9a961e18a258d94fa35b0c433424e4bbe (diff) | |
| download | zig-5e37da6ade7eb307d51c21a2dfcdbef23e9cbf08.tar.gz zig-5e37da6ade7eb307d51c21a2dfcdbef23e9cbf08.zip | |
Sema: check_comptime_control_flow needs to check runtime_index
Diffstat (limited to 'test')
| -rw-r--r-- | test/behavior/eval.zig | 27 | ||||
| -rw-r--r-- | test/cases/compile_errors/comptime_continue_to_outer_inline_loop.zig | 21 |
2 files changed, 48 insertions, 0 deletions
diff --git a/test/behavior/eval.zig b/test/behavior/eval.zig index dbbdbf2df3..849e0ca6cc 100644 --- a/test/behavior/eval.zig +++ b/test/behavior/eval.zig @@ -1371,3 +1371,30 @@ test "break from inline loop depends on runtime condition" { try expect(blk == 4); } } + +test "inline for inside a runtime condition" { + var a = false; + if (a) { + const arr = .{ 1, 2, 3 }; + inline for (arr) |val| { + if (val < 3) continue; + try expect(val == 3); + } + } +} + +test "continue in inline for inside a comptime switch" { + const arr = .{ 1, 2, 3 }; + var count: u8 = 0; + switch (arr[1]) { + 2 => { + inline for (arr) |val| { + if (val == 2) continue; + + count += val; + } + }, + else => {}, + } + try expect(count == 4); +} diff --git a/test/cases/compile_errors/comptime_continue_to_outer_inline_loop.zig b/test/cases/compile_errors/comptime_continue_to_outer_inline_loop.zig new file mode 100644 index 0000000000..5e6a321db2 --- /dev/null +++ b/test/cases/compile_errors/comptime_continue_to_outer_inline_loop.zig @@ -0,0 +1,21 @@ +pub export fn entry() void { + var a = false; + const arr1 = .{ 1, 2, 3 }; + loop: inline for (arr1) |val1| { + _ = val1; + if (a) { + const arr = .{ 1, 2, 3 }; + inline for (arr) |val| { + if (val < 3) continue :loop; + if (val != 3) unreachable; + } + } + } +} + +// error +// backend=stage2 +// target=native +// +// :9:30: error: comptime control flow inside runtime block +// :6:13: note: runtime control flow here |
