c83a3403a46e10bf70244de39c130ee7357c3dbe
`arr[i] = mk()` where mk returns an in-cap (<=24B) struct/tuple/array left the result in the #4 cgreturn registers (AX/DX/CX), but the N_ASSIGN-into-N_INDEX path had no arm for an N_CALL rhs, so it fell to the scalar store tail: only member 0 was written and the index scale clobbered CX. Both stages emitted byte-identical wrong code (the documented-but-silent #31-G gap), so the byte-id gate was blind to it. Add an in-cap N_CALL-rhs arm: materialise the return into a frame scratch first (keeping the CALL at the frame's natural 16B alignment), resolve &arr[i], then word-copy the full eightbyte count + sub-8 tail -- mirroring the #4 receive shape and the #270-1b copy. The eightbyte count derives from the element size in the type table. Over-cap returns (#234), non-call rhs (#270-1b) and tuple literals (#121) are unaffected; the sibling field/deref shapes stay loud (#24). Surfaced by the codegen miscompile hunt (finding C2c). Pinned by test/lang/idx_aggret_recv_test.ww (10 value-asserting rows: 2/3-eightbyte structs+tuples, array elem, sub-8 tail, const/runtime index, all four base shapes; reddens on revert).
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%