✓
Passing This code compiles and runs correctly.
Code
// Test 828: Nested label loops
//
// BUG: When labels are nested (label within a label), the compiler generates
// tail calls to label functions but doesn't actually generate those functions.
//
// This causes "use of undeclared identifier" errors for label functions.
const std = @import("std");
~event outer { count: i32 }
| continue-outer i32
| done-outer
~event inner { count: i32 }
| continue-inner i32
| done-inner
~proc outer|zig {
std.debug.print("Outer: {}\n", .{count});
if (count < 2) {
return .{ .@"continue_outer" = count + 1 };
}
return .{ .@"done_outer" = .{} };
}
~proc inner|zig {
std.debug.print(" Inner: {}\n", .{count});
if (count < 2) {
return .{ .@"continue_inner" = count + 1 };
}
return .{ .@"done_inner" = .{} };
}
// Nested labels: #outer contains #inner
~#outer outer(count: 0)
| continue-outer o |> #inner inner(count: 0)
| continue-inner i |> @inner(count: i)
| done-inner |> @outer(count: o)
| done-outer |> _
Actual
Outer: 0
Inner: 0
Inner: 1
Inner: 2
Outer: 1
Inner: 0
Inner: 1
Inner: 2
Outer: 2
Expected output
Outer: 0
Inner: 0
Inner: 1
Inner: 2
Outer: 1
Inner: 0
Inner: 1
Inner: 2
Outer: 2
Test Configuration
MUST_RUN