← board

Track guessed as C from the FAILING STEP — line 2 of 2, if [ ! -f "library_candidates/lua/src/lua.h" ]; then \ echo "test-lua-cross: SKIP — no lua tree at library_candidates/lu, which names test/lua/runner.c. Not from the job's name or its src: those describe what the job is ABOUT, and this job's recipe spans 4 source file(s). The ranker reads frontmatter, so this line — not the body — decides who works it; correct it if the guess is wrong.

origin/master has advanced 8 commit(s) since this sha. Re-verify at current HEAD before acting — the callback is tagged to the sha that was tested, which may no longer be the state of the tree.

regression: test-lua-cross#src:tools/compiler_srchash.sh at 1236bf31f930 in step 2/2, if [ ! -f "library_candidates/lua/src/lua.h" ]; then \ echo "test-lua-cross: SKIP — no lua tree at library_candidates/l… (auto-filed by twatch)

Repro

tools/testmgr.py --tier full --job 'test-lua-cross#src:tools/compiler_srchash.sh' at 1236bf31f93084fe322e626880cc6132a33cf64a

Range

The named sha 1236bf31f930 CANNOT be the cause — it touches no buildable file (docs / tickets / tstate only). It is the sha that was TESTED, i.e. the upper bound of an untested range; the cause is somewhere below it.

bad 1236bf31f930, last good 8e12236502be, 10 commit(s) in range — the watcher narrows this by idle bisect; check tstate/TSTATE.md for the current range.

Log tail

pascal26:28: error: expected C expression
(tail)
self-host fixedpoint: verified — 1 round(s), 0f1d03315f4e (stamp read back; sources match it)
test-lua-cross: building lua for aarch64 ...
pascal26:4: warning: "/*" within comment
pascal26:28: error: expected C expression
  in: library_candidates/lua/src/lvm.c
  near:       >>>  L_OP_MOVE  
test-lua-cross: FAIL aarch64 (build error)
test-lua-cross: building lua for arm32 ...
pascal26:4: warning: "/*" within comment
pascal26:28: error: expected C expression
  in: library_candidates/lua/src/lvm.c
  near:       >>>  L_OP_MOVE  
test-lua-cross: FAIL arm32 (build error)
test-lua-cross: building lua for i386 ...
pascal26:4: warning: "/*" within comment
pascal26:28: error: expected C expression
  in: library_candidates/lua/src/lvm.c
  near:       >>>  L_OP_MOVE  
test-lua-cross: FAIL i386 (build error)
test-lua-cross: building lua for riscv32 ...
pascal26:4: warning: "/*" within comment
pascal26:28: error: expected C expression
  in: library_candidates/lua/src/lvm.c
  near:       >>>  L_OP_MOVE  
test-lua-cross: FAIL riscv32 (build error)
test-lua-cross: FAILURES

Stub ticket: signal only. Track T agent (face 2) enriches or a dev track takes it from the repro line.

Triaged (frankZ, plexus, 2026-09-02) — one construct, and it is the only one

Reproduced at binary 7ef59bc560b4b9fc with the recipe's own flags, byte-identical to the log tail above. Cause, both counter-tests, and the 6/6 corpus run that proves nothing is behind the gap: [[bug-c-labels-as-values-is-the-whole-of-the-lua-regression]].

Same root as the five test_c_gtk* reds — 00ab464bf's GNU C 2.7 claim, seven jobs between them. The gtk five are fixed; these two need the feature.

Do not add -DLUA_USE_JUMPTABLE=0 to the recipe to close this. It would go green while hiding the gap and while no longer testing what a real lua build does on a GNU-announcing compiler.

Fixed by the feature, not by the recipe — measured 2026-09-02

&&label and goto *expr are implemented (aarch64 under qemu arm in 15e4b9c0a, x86-64 in 6eea46f7c). The recipe is untouched: no -DLUA_USE_JUMPTABLE=0, no -U__GNUC__. The runner builds and all six lua programs match .expected on aarch64 under qemu.

Read "6/6" with its control attached. The lua suite does not discriminate the two interpreter paths — a -DLUA_USE_JUMPTABLE=0 build passes all six as well, which is exactly why the counter-tests in the diagnosis above worked. What proves the computed-goto arm is the one that compiled is a binary comparison at the same flags:

$ ./compiler/pascal26 --target=aarch64 -g -Ilib/crtl/include -Ilib/crtl/src \
      -Ilibrary_candidates/lua/src test/lua/runner.c <out>
  default  ==  -DLUA_USE_JUMPTABLE=1   (byte-identical)
  default  !=  -DLUA_USE_JUMPTABLE=0

Without those two lines, "6/6" would be a true sentence about the wrong claim.