w6c: classify tagged call-result args by the stamped type

taggedcallslot gated on an N_IDENT callee + fnretlookup, so every
N_DOT / wwi-decl'd cross-module callee (and every fn-pointer call)
returned 0 and its tagged call-result ARG fell off the cursor-push
path into a 16B scratch spill where cstage PUSHQes AX/DX (cstage keys
the same push on args[i]->type, cgen.c tagged_arg_size). Read the
stamped result type instead — the #209/#211 predicate-to-stamp
discipline, same class as the fn-value cgident fix.

Graduates BOTH remaining DATABYTEID_DIVERGED pins
(r700_strings_byteindex frame 80->64, r839_xmod_nominal_match frame
32->16) — the ledger is EMPTY; the byteid gate ran 1389 data fixtures
at 0 pinned-divergent. Lang rows cover the same-module control,
fn-pointer, float-member, and str-member shapes (byte-identical each).

Separate latent lead banked, NOT closed here: the tagged
subset-widening call arg ((i64|bool) passed as (i64|bool|void))
byte-diverges pre-existing — cstage stages through a 16B local,
wwstage passes direct; runtime-equivalent.
This commit is contained in:
2026-08-08 18:09:08 +09:00
parent 192ddd4c66
commit 854a532feb
3 changed files with 58 additions and 16 deletions

View File

@@ -730,16 +730,7 @@ DATABYTEID_EXPECTED_MIN = 915
# discipline): each entry must still build on both stages AND still differ.
# When a compiler fix lands the entry fails demanding graduation out of
# this list rather than silently widening coverage.
# r700_strings_byteindex: latent, exposed by the 700_e2e migration —
# wwstage spills a wwi-decl'd tagged call-result arg through a 16B
# scratch pair where cstage PUSHQes AX/DX (frame 64 vs 80); runtime-
# equivalent, sibling of the closed #211 name-keyed family.
# r839_xmod_nominal_match: latent, exposed by the 839 migration (the
# carrier waived byte-id silently) — same spill family as r700: wwstage
# routes the cross-module tagged call-result through a 16B scratch pair
# where cstage PUSHQes AX/DX (frame 16 vs 32); runtime-equivalent
# (both stages run exit 42).
DATABYTEID_DIVERGED = r700_strings_byteindex r839_xmod_nominal_match
DATABYTEID_DIVERGED =
$(if $(DATABYTEID_FILES),,$(error test-byteid: empty data corpus))
test-data-byteid: $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww
@work=$$(mktemp -d "$(CURDIR)/$(DATABYTEID_DIR).XXXXXX") || exit 1; \