cgen: key the str/slice arg recognizers off the checker stamp

The wwstage nodeisstr/nodeisslice recognizers were name-keyed for
every non-local shape: an indirect fn-pointer callee ((*f)() — the
errnotest #59.5 divergence, streq receiving a shifted register file)
and module-global let/const idents (path.sepstr — union-widen pushes
zero-filled len/cap) both fell to false while cstage keys off the
checker stamp unconditionally. Both recognizers now fall back to the
stamped n.type_; push and pop sites share them, so the drain stays
balanced by construction. Graduates the #59.5 errnotest pin.
This commit is contained in:
2026-08-08 00:58:04 +09:00
parent 90af21e132
commit c421c2b20a
6 changed files with 103 additions and 7 deletions

View File

@@ -157,8 +157,14 @@ static const struct ent ents[] = {
{ .fixture = "lib/encoding/base64/base64_test.ww",
.mode = M_ID },
/* #59.4 hextest graduated to M_ID above (#22a reviewer fixes) */
/* #59.5 graduated: the wwstage nodeisstr/nodeisslice recognizers
* fell to false for an indirect fn-pointer callee (`(*f)()`) and
* for module-global let/const idents, so a 3-word str/slice value
* pushed one word (or zero-filled its widen box) and cgcall
* under-drained; both now fall back to the checker stamp. Runtime
* pins: r595_indirect_call_str_arg, globalconst_{str,slice}_widen. */
{ .fixture = "lib/errors/errnotest.ww",
.mode = M_DIVERGE, .cite = "#59.5" },
.mode = M_ID, .cite = "#59.5 graduated by the stamp-keyed recognizers" },
/* #59.6 fmt graduated to M_ID above (#129 fix) */
/* #59.7 siphash graduated to M_ID above (#61 fix) */
{ .fixture = "lib/log/logtest.ww",