f8aebc045da6c57d234e09acc601b310eabaa2ca
exprtype's N_IDENT branch resolved a bare value-ident through the flat-scope scopelookup, which bucket-walks and returns whichever same-leaf symbol heads the bucket (the last-registered one). Under a foreign curmod that binds a same-named symbol from the wrong module and drags in its declaration's type: resolving `read` to io.read while checking os pulled io.read's (size|eof|error) return node, whose bare `error` then bound strconv.error instead of io.error. The mistyped union variant made the tagged-tag remap's flatvariantidxt return -1 (correctly: the union held the wrong type), collapsing the tag to 0 — the #226 fmt cs/ww asm divergence. Resolve through scopelookupprefer(c.cur, c.curmod, e.str), preferring the current module, mirroring cstage cmd/wcc/check.c:66 scope_lookup_prefer. Sibling bare-leaf sites already migrated: #56 (N_CALL callee), #53 (bare TNAME). #226 is thereby an instance of #55, not a nominal-identity gap: io.error is already a sound sym-cached singleton. The remaining bare-leaf sites (N_DOT-callee leaf, varianterr, scruttype) and the cgen-side cgident analogue are tracked separately. fmt's 777/780/781 stay STAGE_CS pending a separate spread-union residual. test/wcc/794: cross-module bare-leaf value-ident, reject->accept polarity (w6c_ww must accept the cstage-emitted combined); no byte-id assertion as the minimal value-ident also trips the open cgen-side cgident bug.
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%