mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 22:35:24 +00:00
AstGen: emit break_inline from inline while loop
This commit is contained in:
parent
bcf2eb1a00
commit
7f91be9c80
@ -1878,8 +1878,8 @@ fn continueExpr(parent_gz: *GenZir, parent_scope: *Scope, node: Ast.Node.Index)
|
||||
continue;
|
||||
}
|
||||
|
||||
// TODO emit a break_inline if the loop being continued is inline
|
||||
_ = try parent_gz.addBreak(.@"break", continue_block, .void_value);
|
||||
const break_tag: Zir.Inst.Tag = if (gen_zir.is_inline) .break_inline else .@"break";
|
||||
_ = try parent_gz.addBreak(break_tag, continue_block, .void_value);
|
||||
return Zir.Inst.Ref.unreachable_value;
|
||||
},
|
||||
.local_val => scope = scope.cast(Scope.LocalVal).?.parent,
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
const std = @import("std");
|
||||
const builtin = @import("builtin");
|
||||
const expect = std.testing.expect;
|
||||
const assert = std.debug.assert;
|
||||
|
||||
test "while loop" {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
||||
@ -326,3 +327,12 @@ test "while error 2 break statements and an else" {
|
||||
try S.entry(true, false);
|
||||
comptime try S.entry(true, false);
|
||||
}
|
||||
|
||||
test "continue inline while loop" {
|
||||
comptime var i = 0;
|
||||
inline while (i < 10) : (i += 1) {
|
||||
if (i < 5) continue;
|
||||
break;
|
||||
}
|
||||
comptime assert(i == 5);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user