From e927b647dfa030291db5e67bdffaf8984d9059e0 Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Thu, 18 Jun 2026 00:15:24 +0900 Subject: [PATCH] =?UTF-8?q?test/wcc:=20989=5Fseptest=20run-exit=20rows=20?= =?UTF-8?q?=E2=80=94=20userman/badsig=20reject,=20collide=5Frun=20coexist?= =?UTF-8?q?=20(M4=20E2-C2a,=20#22)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extends the ww test --sep run-exit gate with 3 rows on both stages: userman and badsig REJECT (exit!=0; explicit main under -T, bad @test signature), collide_run ACCEPT exit==0 (user fn run + lib test.run coexist post #80/#84). Reuses the 910/997 fixtures unchanged (SSoT; they outlive the .c gates the E3 flip retires). Under sep a regressed run/test.run collision is a hard w6l duplicate-symbol link error so exit==0 is non-vacuous; collide_run also pins cs==ww byte-id (1 TEXT main, 1 CALL test.run) for the rule-10 stage-symmetry the combined coexist_run carried. Test-only; all 5 binary pins hold. --- test/wcc/989_septest_run.c | 58 ++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/test/wcc/989_septest_run.c b/test/wcc/989_septest_run.c index 508963fa..12eb1dcc 100644 --- a/test/wcc/989_septest_run.c +++ b/test/wcc/989_septest_run.c @@ -15,6 +15,13 @@ * fails. The failing row is the non-vacuity teeth: it proves the @tests * genuinely RUN under sep (a no-op --sep that linked an empty main would * exit 0 on the failing fixture and the gate would catch it). + * This same RUN-EXIT path also hosts the @test user-facing reject + + * coexist legs ported from 910/997 (C2a, #83), which die at the M4 flip + * that deletes 910/997: `userman` (explicit user main collides with the + * -T synth entry) and `badsig` (non-`fn() void` @test) must reject + * (exit != 0) on both stages; `collide_run` (user `fn run` coexists with + * lib/test's bound runner) must accept and run to exit 0 — under sep the + * two land in distinct units, so a regressed collision fails the link. * 2. cs==ww (rule 10): the cstage `ww` and wwstage `ww_ww` sep-drivers emit * byte-identical per-package .s/.wwi for the passing fixture — including * __root.s, which carries the synth `CALL test.run`. @@ -153,8 +160,10 @@ cmp_sepwork(const char *csdir, const char *wwdir, const char *label) struct tcase { const char *label; const char *src; /* inline fixture written to /