Re-arming the wwstage asserttyped bail surfaced 94 nil-stamp warns in the checked corpus: let (a,b) = mod.fn() left its destructure bindings (and every use) unstamped because exprtype's N_CALL arm resolved an N_DOT callee by bare leaf — the gap its own comment flagged (#16/#17). Fix at the root: when an N_DOT callee's lhs resolves to SK_USE, resolve the result via scopelookupinmodule (mirror cstage cexpr check.c:1035 + cgen fnretlookupmod cgen.ww:2263). The N_MLET backfill then just consumes the resolved tuple, matching harec create_unpack_bindings (check.c:1354-1419), which does no callee resolution — single path, no third copy. The SK_USE gate leaves the module-leaf==type/fn-name collision cases (random/fnmatch) on bare lookup — that nominal-resolution gap is a separate fold. Beyond destructure, the root fix also closes a latent cs!=ww divergence on non-destructure cross-module same-leaf calls (a head-ordered shadow was mis-sizing the receive slot). asserttyped is ww-stage only, so the live ww-driver suite can't see this — the net is the warn count (checked 94->0, collision cases unchanged) + cs==ww .s (probe 956). Compiler binary unchanged; 990-997 byte-id hold.
This commit is contained in:
6
Makefile
6
Makefile
@@ -353,6 +353,7 @@ TESTS = $(BIN)/test_smoke $(BIN)/test_lex $(BIN)/test_parse $(BIN)/test_check \
|
||||
$(BIN)/test_f32stamp_run \
|
||||
$(BIN)/test_f32arg_run \
|
||||
$(BIN)/test_tuprecv_f64_run \
|
||||
$(BIN)/test_modqualdestr_run \
|
||||
$(BIN)/test_tupparam_run \
|
||||
$(BIN)/test_structparam_run \
|
||||
$(BIN)/test_structret_run \
|
||||
@@ -1269,6 +1270,11 @@ $(BIN)/test_tuprecv_f64_run: test/wcc/956_tuprecv_f64_run.c $(BIN)/ww \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_modqualdestr_run: test/wcc/956_modqualdestr_run.c $(BIN)/ww \
|
||||
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_tupparam_run: test/wcc/905_tupparam_run.c $(BIN)/ww \
|
||||
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
|
||||
Reference in New Issue
Block a user