533333bd1af6826dfd933c05827c8cd0c263940f
wwstage cgmatch unconditionally spilled any non-ident match scrutinee -- including an addressable BP-relative N_DOT struct field -- into @match_spill and dispatched off the copy (frame $48); cstage reads such a field in place at its BP offset ($32). Both stages were already runtime-correct (latent rule-10 leanness, not a miscompile); this aligns wwstage down to cstage so the asm is byte-identical. The new in-place arm mirrors cstage cgen.c:10241-10296 verbatim: an N_DOT scrutinee with a bare N_IDENT base whose type chases to a value TY_STRUCT and whose field is found by name reads tag/payload at localfind(base)+field.offset. The *ptr-field and call-result cases stay on the spill path by construction (their base does not chase to TY_STRUCT) -- no extra guard. A global value-struct base mis-resolves identically in both stages (localfind returns 0); left untouched as a shared latent (#29), since a ww-only guard would break byte-id. Regenerates the w6c and wwdump combined.ww. Table-driven 831 test: 6 rows (local-field, *ptr-field, plain-ident, call-result, payload remap, str payload) x runtime-both-stages + cs-vs-ww byte-id.
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%