Found in the post-#933 survey. Every row below was executed, with node v24.4.1 as the oracle, against a Debug build of main (f2bafeb). Parse-only probes are wrapped in function __never(){ … }.
parseArrowBody gives an arrow a fresh return/loop/switch context but, unlike parseFnBody, keeps the enclosing labels and the enclosing [Yield], and it never applies the strict-mode parameter rules that the body's own "use strict" imposes retroactively.
| family | program | node | zig-js |
|---|---|---|---|
| labels | var n = 0; l: for (var i = 0; i < 3; i++) { [1].forEach(() => { n++; if (i === 1) break l; }); } | SyntaxError | runs; the break is ignored (n=3 i=3) |
l: { (() => { break l; })(); } and l: { async () => { break l; } } | SyntaxError | accepted | |
outer: for (;;) { [1].forEach(() => { outer: for (;;) break outer; }); break; } (relabel inside the callback) | valid | UnexpectedToken | |
| [Yield] | function* g(){ () => { yield 1; }; } | SyntaxError | accepted |
function* g(){ () => { var yield; }; }, () => { yield.x; }, () => { yield = 1; } | valid | UnexpectedToken | |
globalThis["yield"] = 7; function* g(){ var f = () => { return yield; }; return f(); } g().next().value | 7 | SyntaxError at runtime ("yield is only supported in VM-compiled generator bodies") | |
| strict params | (eval) => { "use strict" }, eval => { "use strict" }, async (eval) => { "use strict" } | SyntaxError | accepted |
(arguments) => { "use strict" }, (yield) => { "use strict" }, (interface) => { "use strict" }, (let) => { "use strict" }, static => { "use strict" } | SyntaxError | accepted |
In total, 36 of the survey's arrow probes differ from node today. JavaScriptCore (home-tool) agrees with node on each one it can run.
Fix: save, reset and restore the three label lists and in_generator around both arrow body forms (the parameters keep the enclosing [?Yield], and a YieldExpression in them stays an error), and run validateStrictParams when the block body has its own "use strict".
Done: each probe matches node. Pinned as focused frontend cases. Debug before/after --diag over the arrow-function, generator, labelled-statement and class subtrees shows 0 failures on both sides.