aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-09-09 21:36:08 +0300
committerVeikka Tuominen <git@vexu.eu>2022-09-15 00:50:18 +0300
commit5e37da6ade7eb307d51c21a2dfcdbef23e9cbf08 (patch)
treea4549f045d0c87d67519eb1045d3ddccf84d9751 /test
parentbf4a3df9a961e18a258d94fa35b0c433424e4bbe (diff)
downloadzig-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.zig27
-rw-r--r--test/cases/compile_errors/comptime_continue_to_outer_inline_loop.zig21
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