Commit 01b454f851

Veikka Tuominen <git@vexu.eu>
2022-03-09 16:12:40
AstGen: ensure lableld block implicitly ends in a break
1 parent bb1fa0b
Changed files (2)
src
test
behavior
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", .{});
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;
+    }
+}