commit 01b454f8515312531ff0c70985203f9aecb022db (tree)
parent bb1fa0bdbd7235308362528e5c1ca408681064e9
Author: Veikka Tuominen <git@vexu.eu>
Date: Wed, 9 Mar 2022 17:12:40 +0200
AstGen: ensure lableld block implicitly ends in a break
Diffstat:
2 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/src/AstGen.zig b/src/AstGen.zig
@@ -1991,6 +1991,9 @@ fn labeledBlockExpr(
defer block_scope.labeled_breaks.deinit(astgen.gpa);
try blockExprStmts(&block_scope, &block_scope.base, statements);
+ if (!block_scope.endsWithNoReturn()) {
+ _ = try block_scope.addBreak(.break_inline, block_inst, .void_value);
+ }
if (!block_scope.label.?.used) {
try astgen.appendErrorTok(label_token, "unused block label", .{});
diff --git a/test/behavior/basic.zig b/test/behavior/basic.zig
@@ -846,3 +846,10 @@ test "discarding the result of various expressions" {
_ = while (S.bar()) |some| break some else {};
_ = for ("foo") |char| break char else {};
}
+
+test "labeled block implicitly ends in a break" {
+ var a = false;
+ blk: {
+ if (a) break :blk;
+ }
+}