wcc/check: #6 stamp inferred-type array global so wwstage compiles it (was asserttyped exit 1)
An inferred-type array global -- let xs = [1,2,3]; -- hard-failed wwstage with 'asserttyped: int' exit 1, while cstage compiled+ran it. The array-twin of the inferred-global family (#135 inferred-float, #150-B inferred-Sym-repoint). exprtype's N_ARRLIT arm synthesizes the array type for an unannotated literal but left two synthesized child nodes unstamped: the count literal (asserttyped trips on it -> the loud failure) and the element TNAME (cgen then drops a non-scalar element's header load -> the silent miscompile that merely accepting on alone would introduce: an inferred str-array's xs[1].len read 24 not 3). Both are now stamped at the synthesis site: cn.type_ (asserttyped facet) and elt.type_ (cgen facet). Inferred int / u8 / str / struct / multi-dim array globals + locals + args now compile byte-identically to the explicit-typed form (== cstage). cstage unchanged (w6c md5 unchanged); selfhost has no inferred array globals so byte-id 990-997 8/8, no lib pin flips. test/wcc/833.
This commit is contained in:
7
Makefile
7
Makefile
@@ -258,6 +258,7 @@ TESTS = $(BIN)/test_smoke $(BIN)/test_lex $(BIN)/test_parse $(BIN)/test_check \
|
||||
$(BIN)/test_str_eq \
|
||||
$(BIN)/test_overlong_arrlit \
|
||||
$(BIN)/test_tuple_elem_overlong \
|
||||
$(BIN)/test_inferred_array_global \
|
||||
$(BIN)/test_slice_str_global_arg \
|
||||
$(BIN)/test_slice_str_global_zero \
|
||||
$(BIN)/test_slice_literal_global \
|
||||
@@ -722,6 +723,12 @@ $(BIN)/test_tuple_elem_overlong: test/wcc/832_tuple_elem_overlong.c $(BIN)/ww \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_inferred_array_global: test/wcc/833_inferred_array_global.c $(BIN)/ww \
|
||||
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
||||
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_slice_str_global_arg: test/wcc/829_slice_str_global_arg.c $(BIN)/ww \
|
||||
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
||||
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
||||
|
||||
Reference in New Issue
Block a user