6bcb0929f8dad80db1d0af8f0916c35da13cae47
#259: the tagged-union array-field indexed STORE arm computed &arr[i] from a non-ident base (`x.o[1]=v` where o:[N](T|void)) with a plain cgexpr(base) — the N_DOT array field auto-derefs (loads the field's first 8 bytes AS a pointer) -> garbage dest -> SEGFAULT. Route the base through the array-gated helper cg_dotbase_addr/dotbaseaddr (dst BX keeps the scaled index live in AX; viaptr + chained handled by the shared helper), mirroring #257. Symmetric both stages. This was the last unrouted cgexpr(base) cell in the array-field-base-address family (#135/#252/#253/#255/#257) — proof-grep of both stages now shows ZERO unrouted base cells in the slice/decay/addr/index/store builders, so the family is closed by construction. (The chained-ptr-field scalar/str/ float store sites at cgenexpr.ww:6489+ / cgen.c:4379+ correctly cgexpr the pointer spine and are the #133 family, not array-field-address.) #256: align wwstage dotchainaddr's N_IDENT non-local arm to carry cstage cg_dotchain_addr's `let_islet || def_isstructdef` guard (here isletvar || deflookup) instead of emitting LEAQ name(SB) unconditionally. Unreachable on valid input (a struct-typed chain root is always local / let-global / struct def) so zero divergent asm — never-silent ethos only. Tests (949): store-only byte-id rows (tagged_store_own/_ptr) gate the #259 store base-address emission cs==ww; store+readback rows (tagged_store_*_rd) are run-only (cstage) proving the store wrote the right slot (66/77) and no longer segfaults. byte-id on the readback rows is blocked by an ORTHOGONAL newly-surfaced divergence in the N_DOT-base tagged-element READ materialization (sibling of #255: wwstage loads one word + zeroes the tag where cstage copies the full 16-byte slot) — the store base is already byte-id; only the read-back diverges. Reported separately for triage. combined.ww regen'd (w6c + wwdump embed cgen).
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%