5ebd9eb6dbb24e68ac0a7799e97e5969bb584455
Taking &x.o[i] (address-of) or slicing x.o[lo:hi] / x.o[lo:] of a struct's [N]T-typed FIELD computed the field's VALUE as the base address (MOVL off(BP),AX) instead of its ADDRESS (LEAQ off(BP),AX) -> garbage pointer -> segfault. The index read/write path was fixed in #135; this is the unwired addr-of + slice sibling — both base-address paths fell to the generic cgexpr(base) auto-deref. Wire the #135 cg_dotbase_addr / dotbaseaddr helper into the addr-of N_INDEX complex-base arm and the N_SLICE base arm, symmetric on both stages (guarded if(!dotbase) cgexpr(base)). Extend the slice element stride (esz) and default-hi length to an N_DOT array-field base too, read from the field's element tinfo / array length via the type table (rule-13) — so non-u8 element slices scale correctly and s.obuf[lo:] gets the array's element count. cstage already derived default-hi via base->type (alen); only wwstage needed the N_DOT default-hi arm. cs==ww byte-identical on every shape. test/949_dotbase_addr_slice_run: 7 dual-stage rows (addr-of local + *struct param, explicit + default-hi u8 slice, non-u8 [4]i32 stride, bare-local control), run + cs==ww byte-id. Regen w6c/wwdump combined.ww.
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%