diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-09-09 16:56:59 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-09-15 00:48:47 +0300 |
| commit | bf4a3df9a961e18a258d94fa35b0c433424e4bbe (patch) | |
| tree | 809407bceeb4b385204a13322b0430388801855e /test/behavior/eval.zig | |
| parent | 002260c27481e50c74dbb3d8998cf8c3b1c472d8 (diff) | |
| download | zig-bf4a3df9a961e18a258d94fa35b0c433424e4bbe.tar.gz zig-bf4a3df9a961e18a258d94fa35b0c433424e4bbe.zip | |
Sema: allow runtime break from inline loop
Closes #12787
Diffstat (limited to 'test/behavior/eval.zig')
| -rw-r--r-- | test/behavior/eval.zig | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/behavior/eval.zig b/test/behavior/eval.zig index 47d2e4374e..dbbdbf2df3 100644 --- a/test/behavior/eval.zig +++ b/test/behavior/eval.zig @@ -1337,3 +1337,37 @@ test "lazy value is resolved as slice operand" { try expect(@ptrToInt(ptr1) == @ptrToInt(ptr2)); try expect(ptr1.len == ptr2.len); } + +test "break from inline loop depends on runtime condition" { + const S = struct { + fn foo(a: u8) bool { + return a == 4; + } + }; + const arr = [_]u8{ 1, 2, 3, 4 }; + { + const blk = blk: { + inline for (arr) |val| { + if (S.foo(val)) { + break :blk val; + } + } + return error.TestFailed; + }; + try expect(blk == 4); + } + + { + comptime var i = 0; + const blk = blk: { + inline while (i < arr.len) : (i += 1) { + const val = arr[i]; + if (S.foo(val)) { + break :blk val; + } + } + return error.TestFailed; + }; + try expect(blk == 4); + } +} |
