585ec50676bd993ec15194a7ea05bd4967c6a901
cg_dotbase_addr / dotbaseaddr rejected a non-ident inner, so a chained base (`o.p.m[i]` / `o.i.m[i]` / `o.a.b.m[i]`) fell to cgexpr(base) which auto-derefs the array field's first 8 bytes AS a pointer -> garbage base -> segfault (base64 fillobuf `s.enc.encmap[...]` blocker). Extend the one helper per stage to accept a chained inner: a new cg_dotchain_addr / dotchainaddr recovers the container base via the dot-chain spine (recurse to &x, deref when x is a *struct, sum field offsets), keeping the same no-AX/no-stack spill contract. dotbaseaddr then takes the pointer VALUE of inner when viaptr, else its ADDRESS, and adds the field offset. One fix closes every op (index r/w, addr-of, slice, compound) since all route through the helper. Symmetric cs==ww byte-id. test/949: +22 rows. Chained-PTR (rd/wr/addr/slice x2/compound), deeper (value+ptr leaf links, triple-pointer exercising the internal deref), non-u8 esz stride (i32 addr+slice), and single-level controls — all byte-id. The chained VALUE-container arm (`o.i.m`) is run-only (byteid=0): it needs a value nested-struct instance, which trips THREE orthogonal pre-existing cs!=ww emission divergences (bare-let zero-init policy, global DATAW byte count, i32 element-load opcode in the index fallback) unrelated to #253. Run correctness proves the segfault is gone for that cell; byte-id there awaits the separate wwstage value-nested-struct fix.
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%