556a65ee8638e934d64341397240d7ebb6b9d872
wwstage's desugarcallargs ran no general per-arg typecheck (only the narrow #258 array-to-slice arm): any mistyped scalar call-arg silently miscompiled (int read as a 24B slice header; the -T face was a user const __wwtests building a garbage test binary). Route every call-arg through the predicate union isassignable()||assignableaddrfn(), mirroring cstage type_assignable||assignable_addrfn and the check.c:1869 diagnostic. Confident scalar/aggregate and aggregate/aggregate kind-mismatch rejects live in shared isassignable; the concrete-to- tagged arm is shape-matched-lenient via tagshape() (AST mirror of cgen taggedvariantindext) so genuine variant members keep flowing while shape-mismatched aggregates reject. Reserve __wwtests under -T in both stages (mirror the main reservation, check.c:2996). New table-driven 989_callarg_typecheck, 31 fixtures, reject rows proven red on pre-fix binaries. Deferred, filed, site-commented: the assign seam rides #178->#36 (typeeqast cannot compare variadic/module-qualified fn sigs); the same-coarse-shape same-leaf nominal collision over-accept rides #37 (#10/#66 — the distinguishing module is absent from the AST surface isassignable operates on).
Description
No description provided
Languages
C
89.4%
Python
7.2%
Makefile
2.3%
Shell
0.8%
Assembly
0.3%