# ww — Plan 9-organised toolchain. POSIX make. # # Build a small static frontend library libwcc.a and the user-facing # driver `ww`. Per-target tools (w6c, w6a, w6l) and the runtime are added # in their own phases. Everything lands under out/. PREFIX ?= /usr/local CC ?= cc AR ?= ar # Parallelise the build by default. The C-compile DAG and the five # wwstage builds write disjoint outputs (each .o is distinct; each # wwstage tool's side files land at its own selfhost/cmd//main.* # stem), so -j is order-independent. test/run's Phase-2 byte-id gates # (950/990-997) are a single serial recipe — MAKEFLAGS -j does not # reach inside them. Override with `make -j1` if needed. NPROC ?= $(shell nproc 2>/dev/null || echo 4) MAKEFLAGS += -j$(NPROC) # Wrap the C compiler with ccache when present — content-addressed, so # byte-identical to plain cc; just skips recompiling unchanged TUs. # Falls back cleanly to bare $(CC) when ccache is absent. A command-line # CC= override wins and is left unwrapped. CC := $(shell command -v ccache >/dev/null 2>&1 && echo "ccache $(CC)" || echo "$(CC)") CFLAGS ?= -O0 -g -Wall -Wextra -Wpedantic -Wno-unused-parameter CFLAGS += -std=c99 -fno-strict-aliasing -D_POSIX_C_SOURCE=200809L INCS = -Icmd/wcc OUT = out BIN = $(OUT)/bin LIB = $(OUT)/lib OBJ = $(OUT)/obj WCC_SRC = cmd/wcc/mem.c cmd/wcc/err.c cmd/wcc/tok.c cmd/wcc/lex.c \ cmd/wcc/ast.c cmd/wcc/parse.c cmd/wcc/sym.c cmd/wcc/type.c \ cmd/wcc/check.c WCC_OBJ = $(WCC_SRC:cmd/wcc/%.c=$(OBJ)/wcc/%.o) WW_SRC = cmd/ww/main.c WW_OBJ = $(WW_SRC:cmd/ww/%.c=$(OBJ)/ww/%.o) WD_SRC = cmd/wwdump/main.c WD_OBJ = $(WD_SRC:cmd/wwdump/%.c=$(OBJ)/wwdump/%.o) W6C_SRC = cmd/w6c/main.c cmd/w6c/cgen.c cmd/w6c/txt.c cmd/w6c/swt.c \ cmd/w6c/peep.c cmd/w6c/reg.c W6C_OBJ = $(W6C_SRC:cmd/w6c/%.c=$(OBJ)/w6c/%.o) W6A_SRC = cmd/w6a/main.c cmd/w6a/lex.c cmd/w6a/parse.c cmd/w6a/asm.c cmd/w6a/obj.c W6A_OBJ = $(W6A_SRC:cmd/w6a/%.c=$(OBJ)/w6a/%.o) W6L_SRC = cmd/w6l/main.c cmd/w6l/obj.c cmd/w6l/sym.c cmd/w6l/pass.c cmd/w6l/out.c \ cmd/w6l/dyn.c cmd/w6l/dynout.c W6L_OBJ = $(W6L_SRC:cmd/w6l/%.c=$(OBJ)/w6l/%.o) RT_S = rt/start.s rt/syscall.s rt/alloc.s rt/streq.s rt/abort.s RT_WW = rt/ensure.ww rt/malloc.ww RT_OBJ = $(RT_S:rt/%.s=$(OBJ)/rt/%.o) $(RT_WW:rt/%.ww=$(OBJ)/rt/%.o) # Cstage: one-time C bootstrap (see BOOTSTRAP.md). Built by `cc`. # Goes away at v1.0, replaced by a checked-in stage-0 binary. CSTAGE_BINS = $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(BIN)/wwdump # Wwstage: ww-rewritten toolchain. Built by Cstage today; will be the # only toolchain after Phase 10 closeout. Byte-identical to Cstage # (tests 990-994). WWSTAGE_BINS = $(BIN)/wwdump_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww $(BIN)/ww_ww BINS = $(CSTAGE_BINS) $(WWSTAGE_BINS) LIBS = $(LIB)/libwcc.a $(LIB)/libwwrt.a all: cstage wwstage cstage: $(CSTAGE_BINS) $(LIBS) wwstage: $(WWSTAGE_BINS) # ---- libwcc.a ---------------------------------------------------------- $(LIB)/libwcc.a: $(WCC_OBJ) | $(LIB) $(AR) rcs $@ $(WCC_OBJ) $(OBJ)/wcc/%.o: cmd/wcc/%.c cmd/wcc/ww.h | $(OBJ)/wcc $(CC) $(CFLAGS) $(INCS) -c -o $@ $< # ---- ww driver --------------------------------------------------------- $(BIN)/ww: $(WW_OBJ) $(LIB)/libwcc.a | $(BIN) $(CC) $(CFLAGS) -o $@ $(WW_OBJ) -L$(LIB) -lwcc $(OBJ)/ww/%.o: cmd/ww/%.c cmd/wcc/ww.h | $(OBJ)/ww $(CC) $(CFLAGS) $(INCS) -c -o $@ $< # ---- wwdump (lex/AST diff anchor) -------------------------------------- $(BIN)/wwdump: $(WD_OBJ) $(LIB)/libwcc.a | $(BIN) $(CC) $(CFLAGS) -o $@ $(WD_OBJ) -L$(LIB) -lwcc $(OBJ)/wwdump/%.o: cmd/wwdump/%.c cmd/wcc/ww.h | $(OBJ)/wwdump $(CC) $(CFLAGS) $(INCS) -c -o $@ $< # ---- w6c amd64 compiler ------------------------------------------------ $(BIN)/w6c: $(W6C_OBJ) $(LIB)/libwcc.a | $(BIN) $(CC) $(CFLAGS) -o $@ $(W6C_OBJ) -L$(LIB) -lwcc $(OBJ)/w6c/%.o: cmd/w6c/%.c cmd/w6c/gc.h cmd/w6c/6.out.h cmd/wcc/ww.h | $(OBJ)/w6c $(CC) $(CFLAGS) $(INCS) -Icmd/w6c -c -o $@ $< # ---- w6a amd64 assembler ----------------------------------------------- $(BIN)/w6a: $(W6A_OBJ) | $(BIN) $(CC) $(CFLAGS) -o $@ $(W6A_OBJ) $(OBJ)/w6a/%.o: cmd/w6a/%.c cmd/w6a/a.h cmd/w6c/6.out.h | $(OBJ)/w6a $(CC) $(CFLAGS) -Icmd/w6a -Icmd/w6c -c -o $@ $< # ---- w6l amd64 linker -------------------------------------------------- $(BIN)/w6l: $(W6L_OBJ) | $(BIN) $(CC) $(CFLAGS) -o $@ $(W6L_OBJ) $(OBJ)/w6l/%.o: cmd/w6l/%.c cmd/w6l/l.h | $(OBJ)/w6l $(CC) $(CFLAGS) -Icmd/w6l -c -o $@ $< # ---- ww-side wwdump (the lexer port, exercised by 990_selfhost) -------- # Built via the user-facing ww driver. The introspection ports (lex, # tok, ast, parse, typ, sym) live in lib/ww/; the compiler-only bits # (check, cgen*) stay in selfhost/cmd/wcc/. Output named wwdump_ww # to avoid colliding with the C-side wwdump in $(BIN). $(BIN)/wwdump_ww: selfhost/cmd/wwdump/main.ww \ lib/ww/lex/lex.ww lib/ww/lex/tok.ww lib/ww/ast.ww \ lib/ww/parse/parse.ww lib/ww/parse/expr.ww lib/ww/parse/stmt.ww lib/ww/parse/decl.ww lib/ww/typ.ww lib/ww/sym.ww \ selfhost/cmd/wcc/check.ww \ selfhost/cmd/wcc/cgen.ww selfhost/cmd/wcc/cgenexpr.ww \ selfhost/cmd/wcc/cgenstmt.ww selfhost/cmd/wcc/cgenutil.ww \ selfhost/cmd/wcc/cgendecl.ww \ lib/os/os.ww lib/rt/malloc.ww lib/time/time.ww lib/strconv/strconv.ww lib/strconv/stof_data.ww lib/strconv/decimal.ww lib/strconv/stof.ww lib/strconv/ftos_data.ww lib/strconv/ftos.ww lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww lib/ascii/ascii.ww lib/errors/errors.ww lib/io/io.ww lib/io/stream.ww lib/io/types.ww lib/memio/memio.ww lib/fmt/fmt.ww \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) @mkdir -p $(BIN)/wwdump_ww.d cd $(BIN)/wwdump_ww.d && $(CURDIR)/$(BIN)/ww build \ -I $(CURDIR)/lib/ww \ -I $(CURDIR)/lib/ww/lex \ -I $(CURDIR)/lib/ww/parse \ -I $(CURDIR)/selfhost/cmd/wcc \ $(CURDIR)/selfhost/cmd/wwdump/main.ww mv $(BIN)/wwdump_ww.d/main $@ # ---- ww-side w6c (compiler port, exercised by 994_w6c_ww) ------------- # Thin driver: parse + cgen. The frontend (lex/parse/ast/...) lives in # lib/ww/; cgen + check live in selfhost/cmd/wcc/. $(BIN)/w6c_ww: selfhost/cmd/w6c/main.ww \ lib/ww/lex/lex.ww lib/ww/lex/tok.ww lib/ww/ast.ww \ lib/ww/parse/parse.ww lib/ww/parse/expr.ww lib/ww/parse/stmt.ww lib/ww/parse/decl.ww lib/ww/typ.ww lib/ww/sym.ww \ selfhost/cmd/wcc/check.ww \ selfhost/cmd/wcc/cgen.ww selfhost/cmd/wcc/cgenexpr.ww \ selfhost/cmd/wcc/cgenstmt.ww selfhost/cmd/wcc/cgenutil.ww \ selfhost/cmd/wcc/cgendecl.ww \ lib/os/os.ww lib/rt/malloc.ww lib/time/time.ww lib/strconv/strconv.ww lib/strconv/stof_data.ww lib/strconv/decimal.ww lib/strconv/stof.ww lib/strconv/ftos_data.ww lib/strconv/ftos.ww lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww lib/ascii/ascii.ww lib/errors/errors.ww lib/io/io.ww lib/io/stream.ww lib/io/types.ww lib/memio/memio.ww lib/fmt/fmt.ww \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) @mkdir -p $(BIN)/w6c_ww.d cd $(BIN)/w6c_ww.d && $(CURDIR)/$(BIN)/ww build \ -I $(CURDIR)/lib/ww \ -I $(CURDIR)/lib/ww/lex \ -I $(CURDIR)/lib/ww/parse \ -I $(CURDIR)/selfhost/cmd/wcc \ $(CURDIR)/selfhost/cmd/w6c/main.ww mv $(BIN)/w6c_ww.d/main $@ # ---- ww-side w6a (assembler port, exercised by 991_w6a_ww) ------------ # Built like wwdump_ww. Needs -I selfhost/cmd/w6a for the local types/lex/ # parse/asm/obj modules. $(BIN)/w6a_ww: selfhost/cmd/w6a/main.ww selfhost/cmd/w6a/opcodes.ww \ selfhost/cmd/w6a/lex.ww selfhost/cmd/w6a/parse.ww \ selfhost/cmd/w6a/asm.ww selfhost/cmd/w6a/obj.ww \ lib/os/os.ww lib/rt/malloc.ww lib/time/time.ww \ lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) @mkdir -p $(BIN)/w6a_ww.d cd $(BIN)/w6a_ww.d && $(CURDIR)/$(BIN)/ww build \ -I $(CURDIR)/selfhost/cmd/w6a \ $(CURDIR)/selfhost/cmd/w6a/main.ww mv $(BIN)/w6a_ww.d/main $@ # ---- ww-side w6l (linker port, exercised by 992_w6l_ww) --------------- # Built like 6a_ww. Needs -I selfhost/cmd/w6l for the local sym/obj/pass/ # out modules. $(BIN)/w6l_ww: selfhost/cmd/w6l/main.ww selfhost/cmd/w6l/sym.ww \ selfhost/cmd/w6l/obj.ww selfhost/cmd/w6l/dyn.ww \ selfhost/cmd/w6l/pass.ww selfhost/cmd/w6l/dynout.ww \ selfhost/cmd/w6l/out.ww \ lib/os/os.ww lib/rt/malloc.ww lib/time/time.ww \ lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) @mkdir -p $(BIN)/w6l_ww.d cd $(BIN)/w6l_ww.d && $(CURDIR)/$(BIN)/ww build \ -I $(CURDIR)/selfhost/cmd/w6l \ $(CURDIR)/selfhost/cmd/w6l/main.ww mv $(BIN)/w6l_ww.d/main $@ # ---- ww-side ww driver (exercised by 993_ww_ww) ------------------------ # The driver pulls in lib/os (default search path) and orchestrates # w6c/w6a/w6l like the C driver. $(BIN)/ww_ww: selfhost/cmd/ww/main.ww lib/os/os.ww lib/rt/malloc.ww \ lib/time/time.ww lib/strconv/strconv.ww \ lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) @mkdir -p $(BIN)/ww_ww.d cd $(BIN)/ww_ww.d && $(CURDIR)/$(BIN)/ww build \ $(CURDIR)/selfhost/cmd/ww/main.ww mv $(BIN)/ww_ww.d/main $@ # ---- runtime (libwwrt.a, assembled by our own w6a) --------------------- $(OBJ)/rt/%.o: rt/%.s $(BIN)/w6a | $(OBJ)/rt $(BIN)/w6a -o $@ $< # ww-side runtime helpers (rt/*.ww): compile via w6c to .s, then w6a. # Each .ww module is standalone — uses @symbol FFI for rt_alloc/rt_free # rather than `use os;` so no bundling is required. $(OBJ)/rt/%.s: rt/%.ww $(BIN)/w6c | $(OBJ)/rt $(BIN)/w6c $< > $@ $(OBJ)/rt/%.o: $(OBJ)/rt/%.s $(BIN)/w6a | $(OBJ)/rt $(BIN)/w6a -o $@ $< $(LIB)/libwwrt.a: $(RT_OBJ) | $(LIB) $(AR) rcs $@ $(RT_OBJ) # ---- directories ------------------------------------------------------- $(BIN) $(LIB) $(OBJ)/wcc $(OBJ)/ww $(OBJ)/wwdump $(OBJ)/w6c $(OBJ)/w6a $(OBJ)/w6l $(OBJ)/rt: mkdir -p $@ # ---- tests ------------------------------------------------------------- # Each phase adds a $(BIN)/test_ target; the runner walks them. TESTS = $(BIN)/test_smoke $(BIN)/test_lex $(BIN)/test_parse $(BIN)/test_check \ $(BIN)/test_w6c $(BIN)/test_w6a $(BIN)/test_w6a_parsenum \ $(BIN)/test_dataw $(BIN)/test_datar \ $(BIN)/test_w6l $(BIN)/test_data_link \ $(BIN)/test_w6l_manyflags \ $(BIN)/test_arch \ $(BIN)/test_e2e $(BIN)/test_ffi $(BIN)/test_dyn $(BIN)/test_stdlib \ $(BIN)/test_at_test $(BIN)/test_selfimport $(BIN)/test_missingpkg \ $(BIN)/test_driver_flagargs \ $(BIN)/test_let_global $(BIN)/test_def_neg_global \ $(BIN)/test_def_const_fold \ $(BIN)/test_int_cast_signed $(BIN)/test_dot_chain \ $(BIN)/test_amp_dot $(BIN)/test_arr_elem_field \ $(BIN)/test_arr_elem_field_write \ $(BIN)/test_arr_enum_elem \ $(BIN)/test_arr_strslice_elem \ $(BIN)/test_arr_tagged_elem \ $(BIN)/test_dup_main_reject \ $(BIN)/test_tuple_trailing_comma_reject \ $(BIN)/test_voidless_return_reject \ $(BIN)/test_const_reassign_reject \ $(BIN)/test_size_untyped_int \ $(BIN)/test_tagged_staticinit \ $(BIN)/test_arr_infer_len \ $(BIN)/test_arr_cap_reject \ $(BIN)/test_tagged_subset_reject \ $(BIN)/test_callarg_typecheck \ $(BIN)/test_catA_f2_reject \ $(BIN)/test_intoverflow_reject \ $(BIN)/test_unknowndecl_reject \ $(BIN)/test_nullableglobal_reject \ $(BIN)/test_taggedcompoundderef_reject \ $(BIN)/test_taggedcompoundplace_reject \ $(BIN)/test_libprecond_abort \ $(BIN)/test_idxarg_run \ $(BIN)/test_chainidx_run \ $(BIN)/test_tupfieldsize_run \ $(BIN)/test_tagtupfieldsize_run \ $(BIN)/test_nestfield_run \ $(BIN)/test_structlocal_frame \ $(BIN)/test_structcopytail_run \ $(BIN)/test_arrlit_tail_zero_run \ $(BIN)/test_defdim_slice_run \ $(BIN)/test_trystr_run \ $(BIN)/test_allocalias_run \ $(BIN)/test_defdim_field_run \ $(BIN)/test_defdim_argslice_run \ $(BIN)/test_slttypepref_run \ $(BIN)/test_defercap_run \ $(BIN)/test_loopcap_run \ $(BIN)/test_enumcap_run \ $(BIN)/test_wwdumpgate_run \ $(BIN)/test_datargate_run \ $(BIN)/test_dynentry_run \ $(BIN)/test_zerotest_run \ $(BIN)/test_ampfncollide_run \ $(BIN)/test_trycallcollide_run \ $(BIN)/test_gunsigned_run \ $(BIN)/test_taggedidx_run \ $(BIN)/test_fnptrcollide_run \ $(BIN)/test_tagnorm_run \ $(BIN)/test_globslicefield_run \ $(BIN)/test_globstrslice_run \ $(BIN)/test_globtagisas_run \ $(BIN)/test_dotbasehijack_run \ $(BIN)/test_globtagreassign_run \ $(BIN)/test_globstructret_run \ $(BIN)/test_globstructwiden_run \ $(BIN)/test_globtagwiden_run \ $(BIN)/test_globptrfield_run \ $(BIN)/test_globfloatstructarg_run \ $(BIN)/test_arr_ptr_global \ $(BIN)/test_def_arr_infer_len \ $(BIN)/test_def_arr_len \ $(BIN)/test_def_str_table \ $(BIN)/test_arr_zero_vs_infer \ $(BIN)/test_def_str_index_reject \ $(BIN)/test_struct_global_byval_arg \ $(BIN)/test_inferred_global_let \ $(BIN)/test_inferred_float_global \ $(BIN)/test_errfirst_union_try \ $(BIN)/test_alias_tuple_coerce \ $(BIN)/test_str_eq \ $(BIN)/test_overlong_arrlit \ $(BIN)/test_tuple_elem_overlong \ $(BIN)/test_tagged_arr_variant \ $(BIN)/test_nested_union_int_box \ $(BIN)/test_tagged_assignable_cluster \ $(BIN)/test_idcast_tagged_return \ $(BIN)/test_global_tagged_castinit \ $(BIN)/test_xmod_nominal_typeeqast \ $(BIN)/test_inferred_array_global \ $(BIN)/test_slice_str_global_arg \ $(BIN)/test_slice_str_global_zero \ $(BIN)/test_slice_literal_global \ $(BIN)/test_global_arr_elem_field \ $(BIN)/test_structlit_slice_field \ $(BIN)/test_arrglob_nodup_run \ $(BIN)/test_dot_str_chained_arg \ $(BIN)/test_dot_slice_arg \ $(BIN)/test_dot_tagged_source \ $(BIN)/test_tagged_store_intlit \ $(BIN)/test_match_bind_struct \ $(BIN)/test_modtype_leaf_collision \ $(BIN)/test_samemod_prefer \ $(BIN)/test_cgreturn_struct \ $(BIN)/test_cgassign_struct \ $(BIN)/test_dot_explicit_deref \ $(BIN)/test_nested_structlit \ $(BIN)/test_dot_structlit \ $(BIN)/test_nested_call_rhs \ $(BIN)/test_fnlabel_mangle \ $(BIN)/test_cgreturn_variant_zero \ $(BIN)/test_arrlit_str_full \ $(BIN)/test_redecl \ $(BIN)/test_empty_alloc_infer \ $(BIN)/test_struct_field_index \ $(BIN)/test_tagged_return_scratch \ $(BIN)/test_tagged_widen_f64 \ $(BIN)/test_match_spill_pointer_payload \ $(BIN)/test_match_field_inplace \ $(BIN)/test_match_global_field \ $(BIN)/test_struct_byval_param \ $(BIN)/test_struct_multi_return_scratch \ $(BIN)/test_signed_data_emit \ $(BIN)/test_signed_data_emit_run \ $(BIN)/test_tagged_call_arg \ $(BIN)/test_tagged_call_arg_run \ $(BIN)/test_tryprop_tag_remap_run \ $(BIN)/test_nullable_try_run \ $(BIN)/test_nullable_assert_run \ $(BIN)/test_idxfield_compound_run \ $(BIN)/test_dotfield_compound_run \ $(BIN)/test_nested_union_widen_run \ $(BIN)/test_sret_struct_return \ $(BIN)/test_sret_struct_return_run \ $(BIN)/test_tagged_sret_run \ $(BIN)/test_void_error_singleton_run \ $(BIN)/test_tagged_memarg_run \ $(BIN)/test_tagscr_sizes_run \ $(BIN)/test_is_nonident_run \ $(BIN)/test_match_nonident_idx_run \ $(BIN)/test_global_sret_run \ $(BIN)/test_sret_narrow_field \ $(BIN)/test_sret_narrow_field_run \ $(BIN)/test_match_slice_variant \ $(BIN)/test_match_slice_variant_run \ $(BIN)/test_str_abi_run \ $(BIN)/test_str_elem_cap_run \ $(BIN)/test_str_field_cap_run \ $(BIN)/test_str_chained_field_cap_run \ $(BIN)/test_str_tuple_elem_cap_run \ $(BIN)/test_str_arrfield_cap_run \ $(BIN)/test_str_arrfield_store_cap_run \ $(BIN)/test_str_chainfield_store_cap_run \ $(BIN)/test_str_massign_store_cap_run \ $(BIN)/test_slice_store_cap_run \ $(BIN)/test_subslice_cap_run \ $(BIN)/test_subslice_ptresz_run \ $(BIN)/test_deref_slice_store_run \ $(BIN)/test_alias_decl_order_size_run \ $(BIN)/test_alias_structlit_init_run \ $(BIN)/test_array_zeroinit_run \ $(BIN)/test_alias_accept_run \ $(BIN)/test_alias_idx_family_run \ $(BIN)/test_alias_amp_idx_run \ $(BIN)/test_alias_def_addr_run \ $(BIN)/test_def_amp_idx_run \ $(BIN)/test_idx_tagged_field_run \ $(BIN)/test_tagged_widen_arg_run \ $(BIN)/test_tuple_tagged_union_run \ $(BIN)/test_alias_global_decl_run \ $(BIN)/test_alias_cgen_b5_run \ $(BIN)/test_alias_cgen_b6_run \ $(BIN)/test_alias_emit_b7_run \ $(BIN)/test_variant_chain_b95_run \ $(BIN)/test_peellint_gate \ $(BIN)/test_tuple_nary_destructure_run \ $(BIN)/test_rvalue_tuple_destructure_run \ $(BIN)/test_tuple_lit_declblind_run \ $(BIN)/test_overcap_tuple_field_store_run \ $(BIN)/test_mixed_scalar_tuple_sret_run \ $(BIN)/test_tuple_in_union_run \ $(BIN)/test_nonlit_tuple_widen_run \ $(BIN)/test_const_slice_aggregate_run \ $(BIN)/test_append_structlit_evalorder_run \ $(BIN)/test_tuple_index_read_run \ $(BIN)/test_f6_header_run \ $(BIN)/test_f9_float_run \ $(BIN)/test_xmod_fnptr_const_run \ $(BIN)/test_tuple_slot_layout_run \ $(BIN)/test_tagged_tuple_widen_run \ $(BIN)/test_tagged_structlit_payload_run \ $(BIN)/test_forrange_fieldbase_run \ $(BIN)/test_errtype_compare \ $(BIN)/test_intbinop_mismatch \ $(BIN)/test_tuple_elem_slice_len_run \ $(BIN)/test_str_forrange_loopvar_run \ $(BIN)/test_composite_call_arg \ $(BIN)/test_composite_call_arg_run \ $(BIN)/test_letdecl_zeroinit \ $(BIN)/test_nested_if_labels \ $(BIN)/test_alias_leaf_collision \ $(BIN)/test_modcall_widen_slice \ $(BIN)/test_match_4arm_cross_module \ $(BIN)/test_match_4arm_cross_module_run \ $(BIN)/test_free_noop_run \ $(BIN)/test_variant_typekey_run \ $(BIN)/test_enum_modshadow \ $(BIN)/test_struct_modshadow \ $(BIN)/test_def_modshadow \ $(BIN)/test_cstage_label_ssot \ $(BIN)/test_direnum \ $(BIN)/test_module_decl \ $(BIN)/test_chained_index \ $(BIN)/test_chained_write \ $(BIN)/test_dotbase_chained \ $(BIN)/test_parse_error \ $(BIN)/test_variadic_pack \ $(BIN)/test_letcopy_struct \ $(BIN)/test_fnparams_bare_leaf_shadow \ $(BIN)/test_fnret_bare_leaf_shadow \ $(BIN)/test_fnret34_modshadow \ $(BIN)/test_strdef_inline \ $(BIN)/test_def_modqual_modshadow \ $(BIN)/test_size_strategy_convergence \ $(BIN)/test_sumtype_forward \ $(BIN)/test_mklabel_modscoped \ $(BIN)/test_vararg_seq_percall \ $(BIN)/test_modparam_callee \ $(BIN)/test_convwrap_audit \ $(BIN)/test_slice_of_slice_index \ $(BIN)/test_amp_dot_idx \ $(BIN)/test_alias_chain_unwrap \ $(BIN)/test_letbind_void_bang_void \ $(BIN)/test_cgalloc_str_field \ $(BIN)/test_param_shadow_mod \ $(BIN)/test_localoff_scope \ $(BIN)/test_cast_enum_movl \ $(BIN)/test_check_enum_fold \ $(BIN)/test_def_widen_const \ $(BIN)/test_inferred_struct_arg_push \ $(BIN)/test_struct_abi_size \ $(BIN)/test_typeeq_fn_ast \ $(BIN)/test_amp_fn_ident \ $(BIN)/test_star_fn_deref \ $(BIN)/test_star_fn_deref_call \ $(BIN)/test_match_variant_dispatch \ $(BIN)/test_io_types_run \ $(BIN)/test_dot_aliased_ptr \ $(BIN)/test_return_tagged_forward \ $(BIN)/test_widen_transitive \ $(BIN)/test_typeassert_nonident \ $(BIN)/test_isas_spread_variant \ $(BIN)/test_tagged_widen_named_variant \ $(BIN)/test_io_vtable_run \ $(BIN)/test_io_handle_run \ $(BIN)/test_memio_vstream_run \ $(BIN)/test_fmt_handle_run \ $(BIN)/test_fmt_mods_run \ $(BIN)/test_fmt_scanoverflow_run \ $(BIN)/test_fmt_compositions_run \ $(BIN)/test_fmt_int_run \ $(BIN)/test_fieldfn_leaf_collide_run \ $(BIN)/test_amp_fn_assign_run \ $(BIN)/test_type_value_shadow_run \ $(BIN)/test_xmod_alias_struct_collide_run \ $(BIN)/test_xmod_variant_match \ $(BIN)/test_spread_variant_match \ $(BIN)/test_xmod_ident_prefer \ $(BIN)/test_xmod_valglobal_run \ $(BIN)/test_xmod_valglobal_dot_run \ $(BIN)/test_len_strglobal_run \ $(BIN)/test_litstr_pseudo_run \ $(BIN)/test_lenidx_run \ $(BIN)/test_globalidx_run \ $(BIN)/test_zeroinit_run \ $(BIN)/test_tuple_sret_callee \ $(BIN)/test_tuple_sret_receive_run \ $(BIN)/test_append_wide_elem \ $(BIN)/test_delete_elem \ $(BIN)/test_delete_range \ $(BIN)/test_insert_elem \ $(BIN)/test_arrlit_overlong \ $(BIN)/test_idx_structlit_store \ $(BIN)/test_inferred_let_struct \ $(BIN)/test_agg_assign_width \ $(BIN)/test_arrlit_infer_elem_run \ $(BIN)/test_placeaddr_store \ $(BIN)/test_tryprop_multisuccess \ $(BIN)/test_append_place \ $(BIN)/test_struct_tuple_field_slot \ $(BIN)/test_widen_pad_zero_run \ $(BIN)/test_named_ptr_alias_variant_widen \ $(BIN)/test_single_field_struct_zeroinit \ $(BIN)/test_structvariant_largeunion_return \ $(BIN)/test_narrow_alias_deref_store \ $(BIN)/test_taggedderefstore_run \ $(BIN)/test_taggedglobalindex_run \ $(BIN)/test_bufio_vstream_run \ $(BIN)/test_log_vstream_run \ $(BIN)/test_use_promote_alias \ $(BIN)/test_field_signed $(BIN)/test_frame_argcount \ $(BIN)/test_selfhost $(BIN)/test_w6a_ww $(BIN)/test_w6l_ww \ $(BIN)/test_w6c_ww $(BIN)/test_ww_ww $(BIN)/test_self_rebuild \ $(BIN)/test_dyn_ww $(BIN)/test_selfcheck $(BIN)/test_at_test_ww \ $(BIN)/test_attest_record \ $(BIN)/test_fmt_run $(BIN)/test_log_run $(BIN)/test_fnmatch_run \ $(BIN)/test_shlex_run $(BIN)/test_getenv_run $(BIN)/test_dirs_run \ $(BIN)/test_dirs_toolong_run \ $(BIN)/test_stat_run $(BIN)/test_time_run \ $(BIN)/test_intdiv_signed \ $(BIN)/test_strings_run \ $(BIN)/test_hex_run $(BIN)/test_utf8_run $(BIN)/test_bytes_run \ $(BIN)/test_path_run \ $(BIN)/test_letshadow_run \ $(BIN)/test_strglobeq_run \ $(BIN)/test_test_filter \ $(BIN)/test_strconv_int_run \ $(BIN)/test_stof_run $(BIN)/test_ftos_run \ $(BIN)/test_memio_run $(BIN)/test_temp_run $(BIN)/test_getopt_run \ $(BIN)/test_errno_run \ $(BIN)/test_base32_run $(BIN)/test_base64_run \ $(BIN)/test_adler32_run $(BIN)/test_crc16_run \ $(BIN)/test_crc32_run $(BIN)/test_crc64_run \ $(BIN)/test_siphash_run $(BIN)/test_sha256_run \ $(BIN)/test_regex_run \ $(BIN)/test_lib_byteid \ $(BIN)/test_floatlit_run \ $(BIN)/test_checked_run \ $(BIN)/test_floatarr_run \ $(BIN)/test_deref_narrow_run \ $(BIN)/test_inferred_scalar_global_run \ $(BIN)/test_idx_compound_run \ $(BIN)/test_ptrarr_index_run \ $(BIN)/test_dotbase_arr_run \ $(BIN)/test_dotbase_addr_slice_run \ $(BIN)/test_slicecopy_assign_run \ $(BIN)/test_globalslice_arg_run \ $(BIN)/test_structlit_arrfield_run \ $(BIN)/test_defdim_struct_run \ $(BIN)/test_arraytoslice_run \ $(BIN)/test_arrlit_slice_run \ $(BIN)/test_valstruct_subsize_run \ $(BIN)/test_aggret_source_run \ $(BIN)/test_continue_run \ $(BIN)/test_callret_unsigned_arith_run \ $(BIN)/test_sar_shr_run \ $(BIN)/test_def_mangle_run \ $(BIN)/test_arr_u16_store_run \ $(BIN)/test_arr_module_index_run \ $(BIN)/test_arr_float_call_index_run \ $(BIN)/test_def_float_lit_run \ $(BIN)/test_struct_composite_init_run \ $(BIN)/test_array_static_init_run \ $(BIN)/test_strarray_static_run \ $(BIN)/test_array_init_acceptiffits_run \ $(BIN)/test_arrlit_elem_narrow_run \ $(BIN)/test_amp_def_global_run \ $(BIN)/test_f64cgen_run \ $(BIN)/test_f64crossmod_run \ $(BIN)/test_tuprecv_run \ $(BIN)/test_f64xmm_run \ $(BIN)/test_f32lit_run \ $(BIN)/test_f32stamp_run \ $(BIN)/test_f32arg_run \ $(BIN)/test_tuprecv_f64_run \ $(BIN)/test_assert_builtin_run \ $(BIN)/test_modqualdestr_run \ $(BIN)/test_tupparam_run \ $(BIN)/test_structparam_run \ $(BIN)/test_structret_run \ $(BIN)/test_floats_run \ $(BIN)/test_size_type_run \ $(BIN)/test_types_sizelim_run \ $(BIN)/test_types_intlim_run \ $(BIN)/test_opaque_decl_run \ $(BIN)/test_opaque_guards \ $(BIN)/test_opaque_assign_cast_run \ $(BIN)/test_sort_run \ $(BIN)/test_bufio_run $(BIN)/test_random_run \ $(BIN)/test_asserttyped_gap \ $(BIN)/test_cast_base_index \ $(BIN)/test_ascii_run $(BIN)/test_tok_run $(BIN)/test_nkname_run $(BIN)/test_smoke: test/wcc/000_smoke.c $(LIB)/libwcc.a | $(BIN) $(CC) $(CFLAGS) $(INCS) -o $@ $< -L$(LIB) -lwcc $(BIN)/test_lex: test/wcc/100_lex.c $(LIB)/libwcc.a | $(BIN) $(CC) $(CFLAGS) $(INCS) -o $@ $< -L$(LIB) -lwcc $(BIN)/test_parse: test/wcc/200_parse.c $(LIB)/libwcc.a | $(BIN) $(CC) $(CFLAGS) $(INCS) -o $@ $< -L$(LIB) -lwcc $(BIN)/test_check: test/wcc/300_check.c $(LIB)/libwcc.a | $(BIN) $(CC) $(CFLAGS) $(INCS) -o $@ $< -L$(LIB) -lwcc $(BIN)/test_w6c: test/wcc/400_w6c.c $(BIN)/w6c | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_w6a: test/wcc/500_w6a.c $(BIN)/w6c $(BIN)/w6a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_dataw: test/wcc/510_dataw.c $(BIN)/w6a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 530_w6a_parsenum (F14 #62): w6a vs w6a_ww must agree on strtoll-edge # immediate shapes ($ 5 / $08) and both reject a bare -(BP). Needs both # assembler twins. $(BIN)/test_w6a_parsenum: test/wcc/530_w6a_parsenum.c $(BIN)/w6a $(BIN)/w6a_ww \ | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_datar: test/wcc/520_datar.c $(BIN)/w6a $(BIN)/w6l | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_w6l: test/wcc/600_w6l.c $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_w6l_manyflags: test/wcc/632_w6l_manyflags.c $(BIN)/w6c $(BIN)/w6a \ $(BIN)/w6l $(BIN)/w6l_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_data_link: test/wcc/620_data_link.c $(BIN)/w6a $(BIN)/w6l | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_arch: test/wcc/610_arch.c $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(OBJ)/rt/start.o | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_e2e: test/wcc/700_e2e.c $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a $(OBJ)/rt/start.o | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_ffi: test/wcc/800_ffi.c $(BIN)/w6c | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_dyn: test/wcc/810_dyn.c $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_stdlib: test/wcc/900_stdlib.c $(BIN)/w6c | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_at_test: test/wcc/910_at_test.c $(BIN)/ww $(BIN)/w6c $(BIN)/w6a \ $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_selfimport: test/wcc/948_selfimport.c $(BIN)/w6c $(BIN)/w6c_ww \ | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_missingpkg: test/wcc/949_missingpkg.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_driver_flagargs: test/wcc/949_driver_flagargs.c $(BIN)/ww \ $(BIN)/ww_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_test_filter drives `ww test [pattern]` end-to-end on BOTH # driver twins, so it needs the full cstage + wwstage tool sets (ww_ww # shells to w6c_ww/w6a_ww/w6l_ww) plus libwwrt for the link. #17. $(BIN)/test_test_filter: test/wcc/989_test_filter.c $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_callarg_typecheck drives `ww build` + `ww test -c` then ` -T` # on BOTH driver/compiler twins (#24 general call-arg typecheck + #34 # fn-rvalue stamp + #29 rune-lit coerce), so it needs the full cstage + # wwstage tool sets plus libwwrt for the link. $(BIN)/test_callarg_typecheck: test/wcc/989_callarg_typecheck.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_catA_f2_reject drives the #38/F2 checker-reject wave (review items # #2/#6/#7/#10/#39): each REJECT row must FAIL to build on BOTH driver # twins, each control must build+run. Needs the full cstage + wwstage tool # sets plus libwwrt for the link. $(BIN)/test_catA_f2_reject: test/wcc/989_catA_f2_reject.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_intoverflow_reject (F14 #53): an integer literal that overflows u64 # must FAIL to build on BOTH driver twins (wwstage parseint dropped the C # twin's overflow guard). Needs the full cstage + wwstage tool sets plus # libwwrt for the control links. $(BIN)/test_intoverflow_reject: test/wcc/989_intoverflow_reject.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_unknowndecl_reject (F14 #55): an unrecognized top-level construct # must FAIL to build on BOTH driver twins (wwstage's parsefile fallback # silently chewed it with no error). Needs the full cstage + wwstage tool # sets plus libwwrt for the control links. $(BIN)/test_unknowndecl_reject: test/wcc/989_unknowndecl_reject.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_nullableglobal_reject (#45 silent->loud bridge, task #15 prereq): a # module-level nullable `(*T | void)` GLOBAL has no storage path, so a # match/is/as on it silently miscompiled (0(BP) read / undefined ref) on # BOTH stages. The bridge dies LOUD at the size/storage layer; the full # storage + read-class arc is deferred to #15 (CSP handle-singleton # prereq). Needs the full cstage + wwstage tool sets plus libwwrt for the # control links. $(BIN)/test_nullableglobal_reject: test/wcc/989_nullableglobal_reject.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_taggedcompoundderef_reject (#18, last of the tagged-payload WRITE # class): `*p OP= v` where p is a *tagged is nonsense and must loud-reject. # cstage already gated (sz>=16 falls to the assign-resolver fatal); wwstage # silently miscompiled (single MOVQ on the tag word). The align-down adds # the same size gate so both stages reach the identical resolver reject. # Reject rows assert build-fail + shared diagnostic; control rows (scalar # compound + #17 plain deref store) build + run. Needs both tool sets + # libwwrt for the control links. $(BIN)/test_taggedcompoundderef_reject: test/wcc/989_taggedcompoundderef_reject.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_libprecond_abort: test/wcc/989_libprecond_abort.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_taggedcompoundplace_reject (#20/#21, last two members of the # compound-OP-on-tagged-place reject class): `gs[i] OP= v` / `a[i] OP= v` # (INDEX, #20) and `g OP= v` (IDENT, #21) on a tagged-union place are # nonsense and must loud-reject. cstage silently dropped the indexed compound # (cs!=ww); BOTH stages silently corrupted the tag word for the ident # compound (byte-id-green). The fix gates the cstage indexed plain-store arm # on TK_ASSIGN (compound falls to the #133 reject) and adds a tagged-ident # compound guard to both stages. Reject rows assert build-fail + the # per-place-kind diagnostic (#133 for index, #21 for ident); control rows # (scalar ident/index compound + plain tagged ident/local-index/global-index # store) build + run. Needs both tool sets + libwwrt for the control links. $(BIN)/test_taggedcompoundplace_reject: test/wcc/989_taggedcompoundplace_reject.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_idxarg_run (F7-c2, #45/#46): an indexed slice/str element passed as # a call arg must push its full multi-word header. Builds+runs each fixture # on BOTH the cstage `ww` and wwstage `ww_ww` drivers (rule-10), so it needs # the full cstage + wwstage tool sets plus libwwrt for the link. $(BIN)/test_idxarg_run: test/wcc/989_idxarg_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_chainidx_run (F7-c3, #22): a chained index `m[i][k]` whose element is # a str/slice must load the full 24B/16B header. Builds+runs each fixture on # BOTH the cstage `ww` and wwstage `ww_ww` drivers (rule-10). $(BIN)/test_chainidx_run: test/wcc/989_chainidx_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_tupfieldsize_run (F7-c4, #43): a for-range destructure over an array # of tuples must stride by the tuple's true size (a slice/str/tuple field # carries its full width). Builds+runs on BOTH driver twins (rule-10), the # slice-field row pinned cs==ww (see the test header on the absolute value). $(BIN)/test_tupfieldsize_run: test/wcc/989_tupfieldsize_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_tagtupfieldsize_run (#53, sibling of #43): a for-range destructure over # an array of tuples whose field is a tagged union must stride by the tuple's # true size and copy the field's full box. Builds+runs on BOTH driver twins # (rule-10), the tagged-field row pinned cs==ww at the absolute value. $(BIN)/test_tagtupfieldsize_run: test/wcc/989_tagtupfieldsize_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_nestfield_run (#44/#55): a struct with a nested sub-8 composite field # (inner{x:u8,y:u8}, slotsize 8 != size 2) plus a successor must address # every field at the checker's NATURAL offset on BOTH the write # (construction) and read (field-access) paths. wwstage's registerstruct # rebuilt fi.foff slot-padded for the write while the read used tfield # natural — gate-blind (the shape is corpus-absent). Builds+runs on BOTH # driver twins (rule-10), pinning the absolute 0 (all fields read back). $(BIN)/test_nestfield_run: test/wcc/989_nestfield_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_structlocal_frame (#75): a sub-8 nested-composite struct LOCAL must # reserve its frame slot at the struct's NATURAL size (round8(ti.size)), # not the slot-padded ti.slotsize. wwstage's slotsize() TY_STRUCT arm # over-reserved, so outer{a:u8,p:inner{x:u8,y:u8},z:i64} emitted frame $32 # / -24(BP) vs cstage's $16 / -16(BP) — runtime-invisible (both exit 0) # but a cs!=ww .s divergence (rule 10) and a latent byte-id landmine. The # FRAME-ABSOLUTE twin of the RUNTIME 989_nestfield_run: emits .s via w6c # and w6c_ww and byte-diffs (no link, no run). $(BIN)/test_structlocal_frame: test/wcc/989_structlocal_frame.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_structcopytail_run (#73): a whole-struct field-copy `x.i = o` whose # source natural size %8 lands in {2,3,5,6,7} must move exactly that many # bytes via a descending greedy 8->4->2->1 tail (MOVL/MOVW/MOVB), not round # the ragged remainder up to an 8-byte MOVQ that over-writes the field's # natural-offset successor. BOTH stages inlined a tail handling only {4,1}; # tail-2 (inner2{u8,u8} in outer2{i,mark:i32}) and tail-6 (inner6{u16,u16, # u16} in outer6{i,mark:u8}) over-wrote MARK with an 8B MOVQ. Builds+runs on # BOTH driver twins (rule-10), pinning the absolute 0; ctl8 (8-aligned, zero # tail) pins the unchanged path. $(BIN)/test_structcopytail_run: test/wcc/989_structcopytail_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_taggedderefstore_run (#17): a deref-target store `*p = v` (p:*tagged) # sized the write off the pointee and emitted ONE fldstoreop — rhs landed in # the tag word, payload dropped, the union discriminant corrupted. BOTH-stage- # wrong and byte-id-green (#263-class, gate-blind): cstage cmd/w6c/cgen.c #17 # deref else-branch + wwstage cgenexpr.ww #17 single-store tail emitted the # SAME wrong asm. #17 routes the tagged-pointee deref store through the widener # (cg_widen_tagged_store / cgwidentaggedstore) via the shared tag scratch, then # word-copies scratch -> *p (mirror of the index-element tagged arm). Builds+ # runs on BOTH driver twins (rule-10), pinning the absolute 0; scalarctl pins # the unchanged non-tagged single-store path. $(BIN)/test_taggedderefstore_run: test/wcc/989_taggedderefstore_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_taggedglobalindex_run (#16): an indexed store into a GLOBAL tagged array # `gs[i] = v` (gs:[N](A|B)) — the indexed-tagged-element assign arm (cmd/w6c/ # cgen.c ~6502) lacked the `isglobal -> LEAQ name(SB)` base branch the scalar # `arr[i]=v` element arm (~6767) already had, so the global base resolved to a # junk BP offset and the widened store landed nowhere; cstage silently returned # 0 while wwstage (cgenexpr.ww index arm, already global-aware) returned the # correct value — a cs!=ww divergence the byte-id gate could SEE. #16 aligns # cstage UP with the mirrored isglobal branch. Builds+runs on BOTH driver twins # (rule-10), pinning the absolute 0; loc_ctl + scalar_ctl pin the unchanged # frame-base and scalar-template paths. $(BIN)/test_taggedglobalindex_run: test/wcc/989_taggedglobalindex_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_arrlit_tail_zero_run (#13): an under-length array literal zero-fills the # unspecified tail, not the last value. Builds+runs on BOTH driver twins # (rule-10), pinning the absolute value (pre-fix ww tail = last value). $(BIN)/test_arrlit_tail_zero_run: test/wcc/989_arrlit_tail_zero_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_defdim_slice_run (#21): slicing a `def`-dimensioned array (`[MAX]T`) # resolves length + capacity from the type table, not the AST dim node. # Builds+runs on BOTH driver twins (rule-10), pinning the absolute value. $(BIN)/test_defdim_slice_run: test/wcc/989_defdim_slice_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_trystr_run (#16): `?`/`!` unwrap of a str-success tagged union shuffles # the str header for ANY operand shape + variant order, keyed off the stamped # operand type (not a name-keyed call-only first-variant lookup). Builds+runs # on BOTH driver twins (rule-10). $(BIN)/test_trystr_run: test/wcc/989_trystr_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_allocalias_run (#26): alloc(T{...}) for an alias T sizes + field-fills # from the alias-chased struct layout, not a name-keyed lookup of the literal # head. Builds+runs on BOTH driver twins (rule-10). $(BIN)/test_allocalias_run: test/wcc/989_allocalias_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_defdim_field_run (#56): `.len` field-read on a `def`-dimensioned array # (`[MAX]T`) resolves the length from the type table in the local/global/def # cgdot arms + letemitsize (cgdot sibling of #21). Builds+runs on BOTH driver # twins (rule-10). $(BIN)/test_defdim_field_run: test/wcc/989_defdim_field_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_defdim_argslice_run (#56 c4): passing a slice of a `def`-dimensioned # array as a call arg resolves the default-hi length from the type table in # the N_SLICE arg-push arms (cgenutil pushargsrev local+global). Builds+runs # on BOTH driver twins (rule-10). $(BIN)/test_defdim_argslice_run: test/wcc/989_defdim_argslice_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_slttypepref_run (#58/#50, c1): scopelookuptype prefers the current # module's SK_TYPE when a value binding shadows a type leaf two modules both # export. Builds+runs on BOTH driver twins (rule-10). See the test header. $(BIN)/test_slttypepref_run: test/wcc/989_slttypepref_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_defercap_run (#40, F13 c1): the defer stack fails loud at its shared # cap (32) in BOTH stages instead of silently dropping the overflowing # deferred call (wwstage was capped at 16). Builds/rejects on both driver # twins (rule-10). See the test header. $(BIN)/test_defercap_run: test/wcc/989_defercap_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_loopcap_run (#42, F13 c2): the loop-label stack fails loud at its cap # (LOOP_MAX) in BOTH stages instead of an OOB heap write (ww) / wrong jump # target (cstage). Builds/rejects on both driver twins (rule-10). See header. $(BIN)/test_loopcap_run: test/wcc/989_loopcap_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_enumcap_run (#65, F13 c3): the driver's directory enumerator grows # dynamically (mirror cstage realloc-doubling) instead of silently capping at # 256 files. Builds on both driver twins and asserts a byte-identical # combined.ww on a >256-file module (rule-10). See the test header. $(BIN)/test_enumcap_run: test/wcc/989_enumcap_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_wwdumpgate_run (#52, F15 c4): wwdump_ww's -c/-r arms gate on parse-stage # errors instead of silently emitting asm / a resolve report on a broken AST. # Runs wwdump + wwdump_ww directly (rule-10). See the test header. $(BIN)/test_wwdumpgate_run: test/wcc/989_wwdumpgate_run.c \ $(BIN)/wwdump $(BIN)/wwdump_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_datargate_run (#59, F15 c5): w6a loud-rejects a DATAR relocation whose # slot was never defined by a prior DATAW instead of silently dropping the # reloc (zero-filled pointer slot in the .o). Runs w6a + w6a_ww directly and # asserts a byte-identical .o on the healthy path (rule-10). See the header. $(BIN)/test_datargate_run: test/wcc/989_datargate_run.c \ $(BIN)/w6a $(BIN)/w6a_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_dynentry_run (#63, F15 c6): w6l's dynamic e_entry is rebased onto the # actual .text file offset once the dynamic headers overflow the first page, # instead of the stale base+0x1000+val (which mapped into the headers → # SIGSEGV). BOTH stages (#263). Builds + runs ~160-dyn-sym binaries on both # driver twins and asserts exit 42 + byte-identical output (rule-10). Skips # without libc. See the test header. $(BIN)/test_dynentry_run: test/wcc/989_dynentry_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_zerotest_run (#64, F15 c7): `ww test ` over a directory with no # *_test.ww files fails loud (rc=1 + "no *_test.ww files in ...") instead of a # silent rc=0 false-green. Runs both driver twins (rule-10). See the header. $(BIN)/test_zerotest_run: test/wcc/989_zerotest_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_ampfncollide_run (#4, c2): `&fn` synthesis (unoptype TK_AMP + # assignableaddrfn) prefers the current module's fn when a same-leaf fn is # declared in a later module. Builds/rejects on BOTH driver twins (rule-10). # See the test header. $(BIN)/test_ampfncollide_run: test/wcc/989_ampfncollide_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_trycallcollide_run (#11a, c3): exprtypeoftry prefers the current # module's symbol when typing a `?`/`!` operand whose bare leaf collides with # a same-leaf decl in a later module. Builds+runs on BOTH driver twins # (rule-10). See the test header. $(BIN)/test_trycallcollide_run: test/wcc/989_trycallcollide_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_gunsigned_run (F7-c5, #25): a module-global unsigned ident on the # divide/shift/relational path must pick the unsigned opcode. Builds+runs on # BOTH driver twins (rule-10). CLASS-M — see the test header. $(BIN)/test_gunsigned_run: test/wcc/989_gunsigned_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_taggedidx_run (F7-c6, #23): a tagged-union element indexed off a call # or slice base must load the full tag+payload cursor. Builds+runs on BOTH # driver twins (rule-10). $(BIN)/test_taggedidx_run: test/wcc/989_taggedidx_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_tagnorm_run (F1, #1/#3): tagged-union type-set normalization (never-drop, # dedup, single-collapse, nullable fold) must be symmetric — size()/align() # fold + tag numbering. wwstage gated. See the test header. $(BIN)/test_tagnorm_run: test/wcc/989_tagnorm_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_fnptrcollide_run (F7-c7, #14): a value ident whose leaf collides with # a fn name must not be mis-folded into the fn's TEXT reloc. Build-must-fail # on BOTH driver twins (rule-10); wwstage gated. See the test header. $(BIN)/test_fnptrcollide_run: test/wcc/989_fnptrcollide_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globslicefield_run (F8-c1, #35): a SLICE field of a module-global # struct assigned via `g.f = ` must store the full {ptr,len,cap} # header. Builds+runs on BOTH driver twins (rule-10); align-UP — see the # test header. $(BIN)/test_globslicefield_run: test/wcc/989_globslicefield_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globstrslice_run (F8-c2, #47): a module-global str sliced with a # default high bound and passed as a call arg (`take(g[1:])`) must load its # length word for the hi. Builds+runs on BOTH driver twins (rule-10); # align-UP — see the test header. $(BIN)/test_globstrslice_run: test/wcc/989_globstrslice_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globtagisas_run (F8-c3, #18): `is`/`as` on a module-global tagged # ident must read tag/payload from g(SB), not saved-BP. MIXED per-half: # `is` align-UP (cs==ww); `as` #263 ww-runtime-correct (cs!=ww residual, # cstage half = task #46). Per-driver expected rows. See the test header. $(BIN)/test_globtagisas_run: test/wcc/989_globtagisas_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_dotbasehijack_run (F8-c4, #20): indexing an [N]T field of a module- # global struct must not be hijacked by an unrelated global sharing the # field's name. Builds+runs on BOTH driver twins (rule-10); align-UP. $(BIN)/test_dotbasehijack_run: test/wcc/989_dotbasehijack_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globtagreassign_run (F8-c5, #32, #263): reassigning a module-global # tagged ident (g = expr) must store tag+payload. ww-runtime-correct; cstage # drops the store (cs!=ww residual, cstage half = task #41). Per-driver # expected rows. See the test header. $(BIN)/test_globtagreassign_run: test/wcc/989_globtagreassign_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globstructret_run (F8-c6, #41, #263): returning a module-global struct # ident by value must copy g's bytes. ww-runtime-correct; cstage copies frame # garbage (cs!=ww residual, cstage half = task #42). Per-driver expected rows. $(BIN)/test_globstructret_run: test/wcc/989_globstructret_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globstructwiden_run (F8-c7, #50, #263): widening a module-global struct # ident into a tagged union must copy the full payload. ww-runtime-correct; # cstage zero-fills the payload (cs!=ww residual, cstage half = task #43). $(BIN)/test_globstructwiden_run: test/wcc/989_globstructwiden_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globtagwiden_run (F8-c8, #51, #263): widening a module-global tagged # ident into a wider union must copy the whole box as the nested payload. # ww-runtime-correct; cstage copies frame garbage — non-deterministic, so the # cstage rows assert only divergence (cs!=ww, build-ok), cstage half = task #44. $(BIN)/test_globtagwiden_run: test/wcc/989_globtagwiden_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globptrfield_run (inverse-set #47, report-item [58]): a field store # through a module-global *struct pointer must load the pointer from g(SB), # not deref saved BP. cstage SEGV'd (rc=139); align cstage UP to ww (rc=7), # cs==ww byte-identical. Runtime-assign repro (static-init form is #48-blocked). $(BIN)/test_globptrfield_run: test/wcc/989_globptrfield_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 989_globfloatstructarg_run (F8-c9, #31, the EXCEPTION): a module-global # float-bearing struct passed by value must drain its float eightbytes into # the SSE arg regs. align-UP — structfloatclass keyed off the global tnode. $(BIN)/test_globfloatstructarg_run: test/wcc/989_globfloatstructarg_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_let_global: test/wcc/630_let_global.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_def_neg_global: test/wcc/631_def_neg_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_def_const_fold: test/wcc/732_def_const_fold.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_int_cast_signed: test/wcc/640_int_cast_signed.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_dot_chain: test/wcc/650_dot_chain.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_amp_dot: test/wcc/690_amp_dot.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_arr_elem_field: test/wcc/680_arr_elem_field.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_arr_elem_field_write: test/wcc/681_arr_elem_field_write.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_arr_enum_elem: test/wcc/682_arr_enum_elem.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_arr_strslice_elem: test/wcc/683_arr_strslice_elem.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_arr_infer_len: test/wcc/684_arr_infer_len.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_arr_cap_reject: test/wcc/817_arr_cap_reject.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_tagged_subset_reject: test/wcc/989_tagged_subset_reject.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_arr_ptr_global: test/wcc/818_arr_ptr_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_cast_base_index: test/wcc/830_cast_base_index.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_def_str_index_reject: test/wcc/821_def_str_index_reject.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_struct_global_byval_arg: test/wcc/822_struct_global_byval_arg.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_inferred_global_let: test/wcc/823_inferred_global_let.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_inferred_float_global: test/wcc/824_inferred_float_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_errfirst_union_try: test/wcc/825_errfirst_union_try.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_alias_tuple_coerce: test/wcc/826_alias_tuple_coerce.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_str_eq: test/wcc/827_str_eq.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_overlong_arrlit: test/wcc/828_overlong_arrlit.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_tuple_elem_overlong: test/wcc/832_tuple_elem_overlong.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_tagged_arr_variant: test/wcc/834_tagged_arr_variant.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_nested_union_int_box: test/wcc/835_nested_union_int_box.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_tagged_assignable_cluster: test/wcc/836_tagged_assignable_cluster.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_idcast_tagged_return: test/wcc/837_idcast_tagged_return.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_global_tagged_castinit: test/wcc/838_global_tagged_castinit.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_xmod_nominal_typeeqast: test/wcc/839_xmod_nominal_typeeqast.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_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 \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_def_arr_infer_len: test/wcc/814_def_arr_infer_len.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_def_arr_len: test/wcc/816_def_arr_len.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_def_str_table: test/wcc/819_def_str_table.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_arr_zero_vs_infer: test/wcc/820_arr_zero_vs_infer.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_arr_tagged_elem: test/wcc/685_arr_tagged_elem.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_dup_main_reject: test/wcc/842_dup_main_reject.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_tuple_trailing_comma_reject: test/wcc/845_tuple_trailing_comma_reject.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_voidless_return_reject: test/wcc/846_voidless_return_reject.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_const_reassign_reject: test/wcc/847_const_reassign_reject.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_tagged_staticinit: test/wcc/843_tagged_staticinit.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_size_untyped_int: test/wcc/844_size_untyped_int.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_zero: test/wcc/686_slice_str_global_zero.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_literal_global: test/wcc/687_slice_literal_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_global_arr_elem_field: test/wcc/688_global_arr_elem_field.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_structlit_slice_field: test/wcc/689_structlit_slice_field.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 $@ $< # 689_arrglob_nodup_run (#12): a no-init array global emits its zero-fill # DATAW row exactly once (the str-size arm was size-keyed and double-matched # arrays). Builds+runs both twins; asserts one DATAW row per stage. $(BIN)/test_arrglob_nodup_run: test/wcc/689_arrglob_nodup_run.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_dot_str_chained_arg: test/wcc/692_dot_str_chained_arg.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_dot_slice_arg: test/wcc/691_dot_slice_arg.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_dot_tagged_source: test/wcc/693_dot_tagged_source.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_tagged_store_intlit: test/wcc/694_tagged_store_intlit.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_match_bind_struct: test/wcc/695_match_bind_struct.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_modtype_leaf_collision: test/wcc/696_modtype_leaf_collision.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_samemod_prefer: test/wcc/697_samemod_prefer.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_cgreturn_struct: test/wcc/698_cgreturn_struct.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_cgassign_struct: test/wcc/701_cgassign_struct.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_dot_explicit_deref: test/wcc/702_dot_explicit_deref.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_nested_structlit: test/wcc/703_nested_structlit.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_dot_structlit: test/wcc/704_dot_structlit.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_nested_call_rhs: test/wcc/705_nested_call_rhs.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_fnlabel_mangle: test/wcc/706_fnlabel_mangle.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_cgreturn_variant_zero: test/wcc/707_cgreturn_variant_zero.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_param_shadow_mod: test/wcc/708_param_shadow_mod.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_localoff_scope: test/wcc/709_localoff_scope.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_cast_enum_movl: test/wcc/710_cast_enum_movl.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_check_enum_fold: test/wcc/759_check_enum_fold.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_def_widen_const: test/wcc/760_def_widen_const.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_inferred_struct_arg_push: test/wcc/761_inferred_struct_arg_push.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_struct_abi_size: test/wcc/762_struct_abi_size.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_typeeq_fn_ast: test/wcc/763_typeeq_fn_ast.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_amp_fn_ident: test/wcc/764_amp_fn_ident.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_star_fn_deref: test/wcc/765_star_fn_deref.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_star_fn_deref_call: test/wcc/766_star_fn_deref_call.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_match_variant_dispatch: test/wcc/767_match_variant_dispatch.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_io_types_run: test/wcc/768_io_types_run.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_dot_aliased_ptr: test/wcc/769_dot_aliased_ptr.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_return_tagged_forward: test/wcc/770_return_tagged_forward.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_widen_transitive: test/wcc/771_widen_transitive.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_typeassert_nonident: test/wcc/772_typeassert_nonident.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_isas_spread_variant: test/wcc/773_isas_spread_variant.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_tagged_widen_named_variant: test/wcc/774_tagged_widen_named_variant.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_io_vtable_run: test/wcc/775_io_vtable_run.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_io_handle_run: test/wcc/791_io_handle_run.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_memio_vstream_run: test/wcc/776_memio_vstream_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ lib/memio/memio.ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_fmt_handle_run: test/wcc/777_fmt_handle_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ lib/fmt/fmt.ww lib/memio/memio.ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 782 — #211 close (cgen sibling of #208). Self-contained single-file # probe (no lib imports). Graduated STAGE_CS | STAGE_WW + byte-id on # #211 close: build + run on both stages + cs.s == ww.s (rule-10). $(BIN)/test_fieldfn_leaf_collide_run: test/wcc/782_fieldfn_leaf_collide_run.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 $@ $< # #206: bare &fn assignable into * / (*|void). Both # stages (cstage + wwstage byte-id); single-file probes, no lib imports. $(BIN)/test_amp_fn_assign_run: test/wcc/783_amp_fn_assign_run.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 $@ $< # #225: a value binding (param/let/fn) that shadows a same-named TYPE # must not hide it in type-annotation or cast position. cstage was # kind-blind in resolve_typename; wwstage already separated the type and # value namespaces. Driver build + run on both stages + cs.s == ww.s. $(BIN)/test_type_value_shadow_run: test/wcc/788_type_value_shadow_run.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 $@ $< # #223: a struct-field access through a pointer-ALIAS receiver whose # leaf collides with another module's same-leaf STRUCT. cstage driver # build + run for runtime, raw w6c vs w6c_ww .s cmp on the combined.ww # for rule-10 byte-id (the #223 discriminator). Builds its own 2-module # fixtures in a private mktemp dir — not a selfhost-driver test. $(BIN)/test_xmod_alias_struct_collide_run: test/wcc/784_xmod_alias_struct_collide_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #13: cross-module decomposition of an imported union's variants # (`case pkg.a`). Pre-fix the wwstage checker rejected it; cstage built # it. cstage driver build + run pins routing; raw w6c_ww on the # combined.ww (must now accept) + cs==ww byte-id is the discriminator. # Builds its own 2-module fixtures in a private mktemp dir. $(BIN)/test_xmod_variant_match: test/wcc/787_xmod_variant_match.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #209: a `match` over a tagged union with a `...inner` SPREAD variant # (e.g. fmt's `field = (...formattable | *mods)`). The wwstage checker # walked the raw AST u.list and false-rejected every flattened member arm # ("case: not a variant" / "variant not handled"), so any fmt-importing # unit was wwstage-uncompilable. Fix flattens the spread in the checker's # match validity + exhaustiveness walk (selfhost/cmd/wcc/check.ww). The # w6c_ww-accepts + cs==ww byte-id on the driver combined is the # discriminator. Self-contained single-file probe. $(BIN)/test_spread_variant_match: test/wcc/792_spread_variant_match.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_widen_pad_zero_run: test/wcc/793_widen_pad_zero_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #55: bare value-ident in an imported module must resolve same-module- # preferred (exprtype N_IDENT scopelookup -> scopelookupprefer). cstage # driver build + run pins routing; raw w6c_ww on the combined must ACCEPT # (pre-fix it rejected the wrong-module-typed ident). Builds its own # 2-module fixtures in a private mktemp dir. $(BIN)/test_xmod_ident_prefer: test/wcc/794_xmod_ident_prefer.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #1 (cgen residual of #55): cross-module bare value-global load must # mangle reference-site by resolved module / definition-site by the # decl's own module — runtime + cs==ww byte-id. Self-contained single- # file multi-package probe (953 model). $(BIN)/test_xmod_valglobal_run: test/wcc/795_xmod_valglobal_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #229 (N_DOT-base + addr-of sibling of #1): cross-module DOTTED value- # global read AND &-address-of must mangle by the dotted module name, not # cur_mod — runtime + cs==ww byte-id. Self-contained multi-package probe. $(BIN)/test_xmod_valglobal_dot_run: test/wcc/796_xmod_valglobal_dot_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #231: len(str/slice global) must load the .len field via the global's # address (LEAQ name(SB),CX; MOVQ 8(CX),AX), not a bogus BP-relative slot # (cstage) or the whole header's .ptr (wwstage) — runtime + cs==ww byte-id. $(BIN)/test_len_strglobal_run: test/wcc/797_len_strglobal_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #14: a string LITERAL `.len` is TY_UNTYPED_STR, so it misses the typed # slice/str pseudo-field gate and fell to the N_DOT base-eval fallback — # cstage returned AX=.ptr instead of shuffling BX=.len into AX (wwstage # already did). Runtime + cs==ww byte-id; `.ptr` unchanged (control row). $(BIN)/test_litstr_pseudo_run: test/wcc/801_litstr_pseudo_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #19: len() over an INDEXED str/slice element (`len(xs[i])`) returned the # element's .ptr, not its length (cstage == wwstage, shared gap). Runtime # (cstage build+run) + cs==ww byte-id, both dimensions per row. $(BIN)/test_lenidx_run: test/wcc/802_lenidx_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #10: indexing a GLOBAL str / GLOBAL slice (`s[i]` / `g[i]`) read a wide # {ptr,len,cap} header with an 8-byte stride + full-word load instead of the # element load — wwstage `cgindex` dispatched esz off the base tnode KIND # (only N_TARRAY/N_TPTR), so a global str/slice matched neither and defaulted # to esz=8. cstage is correct (type-driven dispatch). Runtime (cstage build+ # run) + cs==ww byte-id, both dimensions per row. $(BIN)/test_globalidx_run: test/wcc/803_globalidx_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #16: a bare `let x: T;` (no rhs) must zero-fill its slot. cgen emitted # the zero-fill only for 8B-primitive and >8B-composite slots — a SUB-8 # aggregate (`let c: [3]u8;`) fell through to NOTHING and read stack # garbage (cstage == wwstage, gate-blind; ken's bytes-967 root cause). # Runtime (cstage dirty()→probe()) + cs==ww byte-id, both dimensions/row. $(BIN)/test_zeroinit_run: test/wcc/840_zeroinit_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #10 Fold A (wide tuple-return / sret, CALLEE side): an over-cap tuple # return (> 4 GP or > 2 SSE eightbytes) now compiles via sret instead of # loud-stopping at the SEND. Compile + cs==ww byte-id only — the receive # stays loud-stopped (Fold B wires the round-trip). Self-contained probes. $(BIN)/test_tuple_sret_callee: test/wcc/798_tuple_sret_callee.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #10 Fold B (wide tuple-return / sret, RECEIVE side): the call/receive # end of the over-cap tuple ABI — single-var-let, destructure, reassign, # return-forward. Runtime round-trip (the net Fold A deferred — byte-id is # blind to a SEND/RECEIVE layout mismatch) + cs==ww byte-id. Self-contained # single-file probes (953 model), no selfhost traversal. $(BIN)/test_tuple_sret_receive_run: test/wcc/799_tuple_sret_receive_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #34: append() stores the full element width per element kind — runtime # readback (tagged box / str+slice 3-word header / struct fill / spread # word-copy / 2-append realloc survival) + per-row cs==ww byte-id (which # pins the wwstage elemsizeofc membsz, scratch order, and frame canary) # + the rule-7 loud-stop for the deferred struct-from-call source shape. $(BIN)/test_append_wide_elem: test/wcc/800_append_wide_elem.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #35 (delete-half): delete(xs[i]) single-element slice removal — runtime # rows across every element kind (scalar/narrow/str/struct/56B tagged) + # the deref-of-local regex fold-2b shape + checker reject rows + cs==ww # asm byte-id (the converged-by-construction shift loop). $(BIN)/test_delete_elem: test/wcc/804_delete_elem.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #35 (range-half, fold-5a prereq P2): delete(xs[lo:hi]) range slice # removal — runtime rows across defaults (full/head/tail/empty/end # boundary), the esz copy-tail spread against the dynamic src offset # (1/2/4/8/16/24), the single-elem equivalence, cap preservation, # operand order-of-eval + aliasing pins, the deref-of-local base, the # indexed-base regex.ha:333 consumer shape EXACT + checker reject rows # w/ diagnostic text + cs==ww asm byte-id (the converged-by-construction # rdl_l/rdl_e shift loop). $(BIN)/test_delete_range: test/wcc/809_delete_range.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #35 (insert-half): insert(xs[idx], v) single-element slice insertion — # delete()'s twin, lowered as append-desugar + rotate-right. Runtime rows # across every element kind (scalar/narrow/str/struct/56B tagged incl. # the regex fold-3 typed-local + cast-rvalue consumer shapes) + idx==len # end-insert + pre-grow idx evaluation + the deref-of-local base + # checker reject rows w/ exact diagnostic text + cs==ww asm byte-id # (the converged-by-construction rotate loop + @insscr frame slot). $(BIN)/test_insert_elem: test/wcc/807_insert_elem.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # F6 (task #4, regex fold-2b): (*ts)[i].field = v / OP= v through the # cgplaceaddr resolver — runtime rows across widths/signedness/str + # compound ops + loud-tail reject rows w/ exact diagnostic text + cs==ww # asm byte-id. # #71: overlong array literal (more elements than the declared [N]) is # a loud checker reject in BOTH stages — local/module/def/struct-field + # the repeat-marker form (which used to clobber the saved BP) — plus # accept guards (exact-N, repeat-fill, [_] inference) w/ runtime + asm # byte-id on both drivers. $(BIN)/test_arrlit_overlong: test/wcc/808_arrlit_overlong.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_placeaddr_store: test/wcc/805_placeaddr_store.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # Task #20: struct-LITERAL store into an INDEXED element (`a[i] = # pt{...}`, `(*ts)[i].caps[k] = capture{...}`) and a DEREF place # (`*p = pt{...}`) — pre-fix a byte-identical SILENT no-op in both # stages (gate-blind; the regex fold-5a groupstart capture store). # Runtime readback rows + asm byte-id per row on both drivers. $(BIN)/test_idx_structlit_store: test/wcc/809_idx_structlit_store.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #24 (fold-5 prereq, PG5 wwstage pair): field read/assign through an # annotation-less struct-literal binding `let p = pt{...}` — pre-fix # the wwstage checker planted the struct BODY node (N_TSTRUCT) as the # inferred let's type, no N_TNAME-keyed cgen arm matched, and `p.f` # leaked the FIELD NAME as a global symbol (`MOVQ f(SB)`, link-fail; # #211 name-leak family) while a tagged-field assign hit the # assign-resolver loud bound. Runtime rows + asm byte-id per row. $(BIN)/test_inferred_let_struct: test/wcc/811_inferred_let_struct.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # Task #49 (Family A, ken silent-set triage): whole-aggregate ASSIGN # `b = a` copied word0 only — one MOVQ for any struct/array/tuple — in # BOTH stages, byte-identical, gate-blind. Same class at the structlit # fill field-from-ident, the deref place (#31-A) and the module-let # global. Fixed via the ONE mem-to-mem funnel (cg_aggcopy/aggcopy fed # by aggarg_srcaddr); non-addressable aggregate rhs dies loud. Runtime # readback rows (the only oracle for a gate-blind class) + per-row # asm byte-id. $(BIN)/test_agg_assign_width: test/wcc/812_agg_assign_width.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #103/#108 (+#104 + m8_slice acceptance): inferred untyped-int → int # (8B) default, both stages byte-id. Pins the 2 direct repros (>2^31 # teeth) + ken v2's 5 named corpus movers + annotated i32/int controls. $(BIN)/test_arrlit_infer_elem_run: test/wcc/813_arrlit_infer_elem_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # F8+F9 (tasks #5/#12, regex fold-2b): `?` interim single-success gate # (|success| > 1 loud-rejected on BOTH stages until task #14's # subset-union typing) + direct `f()? is T` / `match (f()?)` reject # parity — reject rows w/ exact per-stage diagnostic text, accept rows # runtime + cs==ww asm byte-id. $(BIN)/test_tryprop_multisuccess: test/wcc/806_tryprop_multisuccess.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # FA1 (task #15, regex fold-2b): append(*p, v) / append(*p, xs...) # through a pointer-to-slice place via the cgplaceaddr resolver — # runtime rows across element kinds + spread + realloc/frame-integrity # + loud-tail reject rows w/ exact diagnostic text + cs==ww asm byte-id. $(BIN)/test_append_place: test/wcc/806_append_place.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #237: a tuple-typed struct field must contribute its real slot width to # the enclosing struct's slotsize — pure cs==ww .s byte-id (frame size). $(BIN)/test_struct_tuple_field_slot: test/wcc/930_struct_tuple_field_slot.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< # #15: widening a bare *vtable into a NAMED-alias variant (`stream` = # *vtable) of `(file | stream)` must compute the right tag, not default # to tag 0. Both-stage byte-id + runtime, plus a degenerate-ambiguity # reject row (drew's >=2 guard). Self-contained single-file probes. $(BIN)/test_named_ptr_alias_variant_widen: test/wcc/789_named_ptr_alias_variant_widen.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 $@ $< # #213: bare `let b: T;` of an 8B single-field struct must zero-init the # slot (cstage does; wwstage skipped → read-before-init garbage + 778 # cs!=ww). Both-stage byte-id + a read-before-init correctness row. $(BIN)/test_single_field_struct_zeroinit: test/wcc/790_single_field_struct_zeroinit.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 $@ $< # #9: returning a STRUCT variant of a LARGE (>4-eightbyte) tagged union. # Both-stage byte-id + runtime (reads tag AND the widened &fn field, so a # dropped-store regression can't hide behind self-consistent byte-id). # Self-contained single-file probes via the driver, no lib imports. $(BIN)/test_structvariant_largeunion_return: test/wcc/785_structvariant_largeunion_return.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 $@ $< # #11: narrow deref-store through *(!i32-alias) must emit MOVL (4B), not # MOVQ (8B which over-writes the adjacent 4 bytes). Both-stage byte-id + # runtime over-write guard (sentinel high word survives iff MOVL). # Self-contained single-file probes via the driver, no lib imports. $(BIN)/test_narrow_alias_deref_store: test/wcc/786_narrow_alias_deref_store.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_fmt_mods_run: test/wcc/780_fmt_mods_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ lib/fmt/fmt.ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_fmt_scanoverflow_run: test/wcc/989_fmt_scanoverflow_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ lib/fmt/fmt.ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_fmt_compositions_run: test/wcc/781_fmt_compositions_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ lib/fmt/fmt.ww \ lib/memio/memio.ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_fmt_int_run: test/wcc/815_fmt_int_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ lib/fmt/fmt.ww \ lib/memio/memio.ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_bufio_vstream_run: test/wcc/778_bufio_vstream_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ lib/bufio/bufio.ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_log_vstream_run: test/wcc/779_log_vstream_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ lib/log/log.ww \ lib/fmt/fmt.ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_arrlit_str_full: test/wcc/711_arrlit_str_full.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_redecl: test/wcc/712_redecl.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_empty_alloc_infer: test/wcc/729_empty_alloc_infer.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_struct_field_index: test/wcc/713_struct_field_index.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_tagged_return_scratch: test/wcc/714_tagged_return_scratch.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_tagged_widen_f64: test/wcc/715_tagged_widen_f64.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_match_spill_pointer_payload: test/wcc/716_match_spill_pointer_payload.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_match_field_inplace: test/wcc/831_match_field_inplace.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_match_global_field: test/wcc/841_match_global_field.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_struct_byval_param: test/wcc/717_struct_byval_param.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_struct_multi_return_scratch: test/wcc/718_struct_multi_return_scratch.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_signed_data_emit: test/wcc/719_signed_data_emit.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_signed_data_emit_run: test/wcc/923_signed_data_emit_run.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_tagged_call_arg: test/wcc/720_tagged_call_arg.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_tagged_call_arg_run: test/wcc/924_tagged_call_arg_run.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_tryprop_tag_remap_run: test/wcc/925_tryprop_tag_remap_run.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_nested_union_widen_run: test/wcc/925_nested_union_widen_run.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_nullable_try_run: test/wcc/949_nullable_try_run.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_nullable_assert_run: test/wcc/949_nullable_assert_run.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_idxfield_compound_run: test/wcc/949_idxfield_compound_run.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_dotfield_compound_run: test/wcc/949_dotfield_compound_run.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_sret_struct_return: test/wcc/721_sret_struct_return.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_sret_struct_return_run: test/wcc/925_sret_struct_return_run.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_tagged_sret_run: test/wcc/926_tagged_sret_run.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_void_error_singleton_run: test/wcc/949_void_error_singleton_run.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_tagged_memarg_run: test/wcc/929_tagged_memarg_run.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_tagscr_sizes_run: test/wcc/926_tagscr_sizes_run.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_is_nonident_run: test/wcc/927_is_nonident_run.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_match_nonident_idx_run: test/wcc/928_match_nonident_idx_run.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_global_sret_run: test/wcc/940_global_sret_run.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_sret_narrow_field: test/wcc/730_sret_narrow_field.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_sret_narrow_field_run: test/wcc/930_sret_narrow_field_run.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_match_slice_variant: test/wcc/722_match_slice_variant.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_match_slice_variant_run: test/wcc/926_match_slice_variant_run.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_str_abi_run: test/wcc/928_str_abi_run.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_str_elem_cap_run: test/wcc/932_str_elem_cap_run.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_str_field_cap_run: test/wcc/933_str_field_cap_run.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_str_chained_field_cap_run: test/wcc/934_str_chained_field_cap_run.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_str_tuple_elem_cap_run: test/wcc/935_str_tuple_elem_cap_run.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_str_arrfield_cap_run: test/wcc/936_str_arrfield_cap_run.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_str_arrfield_store_cap_run: test/wcc/937_str_arrfield_store_cap_run.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_str_chainfield_store_cap_run: test/wcc/938_str_chainfield_store_cap_run.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_str_massign_store_cap_run: test/wcc/939_str_massign_store_cap_run.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_str_forrange_loopvar_run: test/wcc/940_str_forrange_loopvar_run.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_store_cap_run: test/wcc/941_slice_store_cap_run.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_subslice_cap_run: test/wcc/942_subslice_cap_run.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_subslice_ptresz_run: test/wcc/943_subslice_ptresz_run.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_deref_slice_store_run: test/wcc/944_deref_slice_store_run.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_alias_decl_order_size_run: test/wcc/944_alias_decl_order_size_run.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_alias_structlit_init_run: test/wcc/944_alias_structlit_init_run.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_array_zeroinit_run: test/wcc/944_array_zeroinit_run.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_alias_accept_run: test/wcc/944_alias_accept_run.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_alias_idx_family_run: test/wcc/944_alias_idx_family_run.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_alias_amp_idx_run: test/wcc/944_alias_amp_idx_run.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_alias_def_addr_run: test/wcc/944_alias_def_addr_run.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_def_amp_idx_run: test/wcc/944_def_amp_idx_run.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_idx_tagged_field_run: test/wcc/944_idx_tagged_field_run.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_tagged_widen_arg_run: test/wcc/944_tagged_widen_arg_run.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_tuple_tagged_union_run: test/wcc/944_tuple_tagged_union_run.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_alias_global_decl_run: test/wcc/944_alias_global_decl_run.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_alias_cgen_b5_run: test/wcc/944_alias_cgen_b5_run.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_alias_cgen_b6_run: test/wcc/944_alias_cgen_b6_run.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_alias_emit_b7_run: test/wcc/944_alias_emit_b7_run.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_variant_chain_b95_run: test/wcc/944_variant_chain_b95_run.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_peellint_gate: test/wcc/944_peellint_gate.c tools/peellint | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_tuple_nary_destructure_run: test/wcc/945_tuple_nary_destructure_run.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 $@ $< # #241: materialise an RVALUE tuple (literal / match-yield / ?-call payload) # into the register cursor before a destructure (run + cs==ww byte-id). $(BIN)/test_rvalue_tuple_destructure_run: test/wcc/945_rvalue_tuple_destructure_run.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 $@ $< # #64 + #68: tuple LITERAL fills the register cursor DECL-BLIND — the #57 # decl wire (a declared-tagged element widens into its box) stopped at # N_LET/N_RETURN; destructure-REASSIGN (#64) and CALL-ARG send (#68) still # rode the decl-less route (box stored/sent word0-only, cursor skewed). # Both stages, #263 gate-blind (byte-id cs==ww, both ran wrong). Run + # cs==ww byte-id. $(BIN)/test_tuple_lit_declblind_run: test/wcc/945_tuple_lit_declblind_run.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 $@ $< # #234: over-cap tuple sret store into a local struct field / indexed local # (run + cs==ww byte-id), deferred forms loud-stop (builderr both drivers). $(BIN)/test_overcap_tuple_field_store_run: test/wcc/940_overcap_tuple_field_store_run.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 $@ $< # #235: len() of a tuple-element slice/str reads .len (+8) not .ptr. $(BIN)/test_tuple_elem_slice_len_run: test/wcc/903_tuple_elem_slice_len_run.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 $@ $< # #240: mixed-scalar tuple (e.g. (int,[]u8,str)) sret layout agrees in both # stages — callee SEND foff via the return-type element size, caller RECEIVE # falls an over-cap tuple through to the sret receive (size-gated). $(BIN)/test_mixed_scalar_tuple_sret_run: test/wcc/940_mixed_scalar_tuple_sret_run.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_tuple_in_union_run: test/wcc/940_tuple_in_union_run.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_nonlit_tuple_widen_run: test/wcc/944_nonlit_tuple_widen_run.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_tuple_slot_layout_run: test/wcc/941_tuple_slot_layout_run.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_const_slice_aggregate_run: test/wcc/946_const_slice_aggregate_run.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_append_structlit_evalorder_run: test/wcc/946_append_structlit_evalorder_run.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_tuple_index_read_run: test/wcc/947_tuple_index_read_run.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_f6_header_run: test/wcc/949_f6_header_run.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_f9_float_run: test/wcc/949_f9_float_run.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_xmod_fnptr_const_run: test/wcc/949_xmod_fnptr_const_run.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_tagged_tuple_widen_run: test/wcc/936_tagged_tuple_widen_run.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_tagged_structlit_payload_run: test/wcc/938_tagged_structlit_payload_run.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_forrange_fieldbase_run: test/wcc/937_forrange_fieldbase_run.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_errtype_compare: test/wcc/949_errtype_compare.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_intbinop_mismatch: test/wcc/949_intbinop_mismatch.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_composite_call_arg: test/wcc/723_composite_call_arg.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_composite_call_arg_run: test/wcc/927_composite_call_arg_run.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_letdecl_zeroinit: test/wcc/724_letdecl_zeroinit.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_nested_if_labels: test/wcc/725_nested_if_labels.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_alias_leaf_collision: test/wcc/726_alias_leaf_collision.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_modcall_widen_slice: test/wcc/727_modcall_widen_slice.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_match_4arm_cross_module: test/wcc/728_match_4arm_cross_module.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_enum_modshadow: test/wcc/733_enum_modshadow.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_struct_modshadow: test/wcc/734_struct_modshadow.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_def_modshadow: test/wcc/735_def_modshadow.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_cstage_label_ssot: test/wcc/736_cstage_label_ssot.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_direnum: test/wcc/737_direnum.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_module_decl: test/wcc/738_module_decl.c $(LIB)/libwcc.a | $(BIN) $(CC) $(CFLAGS) -Icmd/wcc -o $@ $< -Lout/lib -lwcc $(BIN)/test_chained_index: test/wcc/739_chained_index.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_chained_write: test/wcc/740_chained_write.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_dotbase_chained: test/wcc/741_dotbase_chained.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_parse_error: test/wcc/742_parse_error.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_variadic_pack: test/wcc/743_variadic_pack.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_letcopy_struct: test/wcc/744_letcopy_struct.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_fnparams_bare_leaf_shadow: test/wcc/732_fnparams_bare_leaf_shadow.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_fnret_bare_leaf_shadow: test/wcc/731_fnret_bare_leaf_shadow.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_fnret34_modshadow: test/wcc/745_fnret34_modshadow.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_strdef_inline: test/wcc/746_strdef_inline.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_def_modqual_modshadow: test/wcc/747_def_modqual_modshadow.c \ $(BIN)/w6c $(BIN)/w6c_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_size_strategy_convergence: test/wcc/748_size_strategy_convergence.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_sumtype_forward: test/wcc/749_sumtype_forward.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_mklabel_modscoped: test/wcc/750_mklabel_modscoped.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_vararg_seq_percall: test/wcc/751_vararg_seq_percall.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_modparam_callee: test/wcc/752_modparam_callee.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_convwrap_audit: test/wcc/753_convwrap_audit.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_of_slice_index: test/wcc/754_slice_of_slice_index.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_amp_dot_idx: test/wcc/755_amp_dot_idx.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_alias_chain_unwrap: test/wcc/756_alias_chain_unwrap.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_letbind_void_bang_void: test/wcc/757_letbind_void_bang_void.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_cgalloc_str_field: test/wcc/758_cgalloc_str_field.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_match_4arm_cross_module_run: test/wcc/929_match_4arm_cross_module_run.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_free_noop_run: test/wcc/930_free_noop_run.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_variant_typekey_run: test/wcc/931_variant_typekey_run.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_use_promote_alias: test/wcc/699_use_promote_alias.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_field_signed: test/wcc/660_field_signed.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_frame_argcount: test/wcc/670_frame_argcount.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_selfhost: test/wcc/990_selfhost.c $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/ww $(BIN)/wwdump $(BIN)/wwdump_ww $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_w6a_ww: test/wcc/991_w6a_ww.c $(BIN)/w6a $(BIN)/w6a_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_w6l_ww: test/wcc/992_w6l_ww.c $(BIN)/w6l $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_w6c_ww: test/wcc/994_w6c_ww.c $(BIN)/w6c_ww $(BIN)/wwdump_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_ww_ww: test/wcc/993_ww_ww.c $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_self_rebuild: test/wcc/995_self_rebuild.c $(BIN)/ww_ww \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww $(BIN)/wwdump_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_selfcheck: test/wcc/950_selfcheck.c $(BIN)/wwdump_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_asserttyped_gap: test/wcc/901_asserttyped_gap.c $(BIN)/wwdump_ww | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_dyn_ww: test/wcc/996_dyn_ww.c $(BIN)/ww $(BIN)/w6l $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_at_test_ww: test/wcc/997_at_test_ww.c $(BIN)/ww_ww $(BIN)/w6c_ww \ $(BIN)/w6a_ww $(BIN)/w6l_ww $(BIN)/w6c $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_attest_record: test/wcc/911_attest_record.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_fmt_run: test/wcc/970_fmt_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_log_run: test/wcc/971_log_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_fnmatch_run: test/wcc/972_fnmatch_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_shlex_run: test/wcc/973_shlex_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_getenv_run: test/wcc/974_getenv_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_dirs_run: test/wcc/975_dirs_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< # 975_dirs_toolong_run (F14 #69): an over-long composed path must abort # loudly, not silently mkdir a truncated wrong directory. Builds+runs a # dirs.config fixture on BOTH driver twins under a short and a ~260B HOME. $(BIN)/test_dirs_toolong_run: test/wcc/975_dirs_toolong_run.c \ $(BIN)/ww $(BIN)/ww_ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_stat_run: test/wcc/976_stat_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_time_run: test/wcc/977_time_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_intdiv_signed: test/wcc/978_intdiv_signed.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_hex_run: test/wcc/979_hex_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_utf8_run: test/wcc/968_utf8_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_bytes_run: test/wcc/967_bytes_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_path_run: test/wcc/989_path_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_letshadow_run: test/wcc/989_letshadow_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_strglobeq_run: test/wcc/989_strglobeq_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_ascii_run: test/wcc/904_ascii_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_tok_run: test/wcc/904_tok_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_nkname_run: test/wcc/905_nkname_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_strconv_int_run: test/wcc/922_strconv_int_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_stof_run: test/wcc/909_stof_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_ftos_run: test/wcc/908_ftos_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_strings_run: test/wcc/966_strings_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_memio_run: test/wcc/980_memio_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_temp_run: test/wcc/981_temp_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_getopt_run: test/wcc/982_getopt_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_errno_run: test/wcc/902_errno_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_base32_run: test/wcc/983_base32_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_base64_run: test/wcc/984_base64_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_adler32_run: test/wcc/985_adler32_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_crc16_run: test/wcc/986_crc16_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_crc32_run: test/wcc/987_crc32_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_crc64_run: test/wcc/988_crc64_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_siphash_run: test/wcc/989_siphash_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_sha256_run: test/wcc/989_sha256_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_regex_run: test/wcc/989_regex_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_lib_byteid: test/wcc/989_lib_byteid.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_floatlit_run: test/wcc/989_floatlit_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_bufio_run: test/wcc/998_bufio_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_random_run: test/wcc/999_random_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_checked_run: test/wcc/969_checked_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_floatarr_run: test/wcc/946_floatarr_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_deref_narrow_run: test/wcc/947_deref_narrow_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_inferred_scalar_global_run: test/wcc/947_inferred_scalar_global_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_idx_compound_run: test/wcc/948_idx_compound_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_ptrarr_index_run: test/wcc/949_ptrarr_index_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_dotbase_arr_run: test/wcc/949_dotbase_arr_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_dotbase_addr_slice_run: test/wcc/949_dotbase_addr_slice_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_slicecopy_assign_run: test/wcc/952_slicecopy_assign_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_globalslice_arg_run: test/wcc/953_globalslice_arg_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_structlit_arrfield_run: test/wcc/949_structlit_arrfield_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_defdim_struct_run: test/wcc/951_defdim_struct_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_arraytoslice_run: test/wcc/953_arraytoslice_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_arrlit_slice_run: test/wcc/953_arrlit_slice_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_valstruct_subsize_run: test/wcc/949_valstruct_subsize_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_aggret_source_run: test/wcc/949_aggret_source_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_continue_run: test/wcc/911_continue_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_sar_shr_run: test/wcc/912_sar_shr_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_callret_unsigned_arith_run: \ test/wcc/906_callret_unsigned_arith_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_def_mangle_run: test/wcc/913_def_mangle_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_arr_u16_store_run: test/wcc/914_arr_u16_store_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_arr_module_index_run: test/wcc/915_arr_module_index_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_arr_float_call_index_run: test/wcc/916_arr_float_call_index_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_def_float_lit_run: test/wcc/917_def_float_lit_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_struct_composite_init_run: test/wcc/918_struct_composite_init_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_array_static_init_run: test/wcc/919_array_static_init_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_strarray_static_run: test/wcc/919_strarray_static_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_array_init_acceptiffits_run: test/wcc/920_array_init_acceptiffits_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_arrlit_elem_narrow_run: test/wcc/951_arrlit_elem_narrow_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_amp_def_global_run: test/wcc/921_amp_def_global_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_f64cgen_run: test/wcc/951_f64cgen_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_floats_run: test/wcc/952_floats_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_size_type_run: test/wcc/957_size_type_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_types_sizelim_run: test/wcc/958_types_sizelim_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_types_intlim_run: test/wcc/959_types_intlim_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_opaque_decl_run: test/wcc/960_opaque_decl_run.c $(BIN)/ww $(BIN)/w6c \ $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_opaque_guards: test/wcc/961_opaque_guards.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_opaque_assign_cast_run: test/wcc/962_opaque_assign_cast_run.c \ $(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_sort_run: test/wcc/963_sort_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_f64crossmod_run: test/wcc/953_f64crossmod_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_tuprecv_run: test/wcc/954_tuprecv_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_f64xmm_run: test/wcc/955_f64xmm_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_f32lit_run: test/wcc/964_f32lit_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_f32stamp_run: test/wcc/965_f32stamp_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_f32arg_run: test/wcc/907_f32arg_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_tuprecv_f64_run: test/wcc/956_tuprecv_f64_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_assert_builtin_run: test/wcc/957_assert_builtin_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(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) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_structparam_run: test/wcc/946_structparam_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< $(BIN)/test_structret_run: test/wcc/946_structret_run.c $(BIN)/ww \ $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \ $(LIB)/libwwrt.a | $(BIN) $(CC) $(CFLAGS) -o $@ $< sizelint: @sh tools/sizelint peellint: @sh tools/peellint test: all sizelint peellint $(TESTS) @WW=$(BIN)/ww BIN=$(BIN) sh test/run test-unit: all sizelint peellint $(TESTS) @WW=$(BIN)/ww BIN=$(BIN) UNIT=1 sh test/run # ---- test-commit: per-commit default (task #10 T1) --------------------- # Full suite, but content-key-SKIPS the expensive wwstage byte-id / # self-compile gates (950/989_lib_byteid/990-997) when their input set is # byte-identical to the last green run — reported as `cached`, never a # silent skip. NOT a substitute for the push bar: `make test` stays the # no-skip bootstrap gate. Cache lives in out/.testcache (gitignored, wiped # by `make clean`); a green `make test` primes it. See test/run. test-commit: all sizelint peellint $(TESTS) @WW=$(BIN)/ww BIN=$(BIN) COMMIT=1 sh test/run # ---- smoke: inner-loop cross-stage byte-id check on a SMALL input ------ # Compiles one self-contained fixture through cstage w6c AND wwstage # w6c_ww and diffs the emitted .s. Catches a cs!=ww emission divergence # (rule 10) in seconds — the per-fold inner-loop check Rob's cadence # calls for. NOT a substitute for the full 990-997 byte-id gate, which # self-compiles main.combined.ww: ALWAYS run `make test` before landing # a cgen/ABI/compiler-lib fold. w6c consumes a flat unit (no import # resolution), so FIXTURE must be import-free or a pre-built .combined.ww. # make smoke # default: rt/malloc.ww # make smoke FIXTURE=rt/ensure.ww # any self-contained .ww FIXTURE ?= rt/malloc.ww smoke: $(BIN)/w6c $(BIN)/w6c_ww @$(BIN)/w6c $(FIXTURE) > $(OUT)/smoke.cs.s || { echo "smoke: cstage w6c failed on $(FIXTURE)"; exit 1; } @$(BIN)/w6c_ww $(FIXTURE) > $(OUT)/smoke.ww.s || { echo "smoke: wwstage w6c_ww failed on $(FIXTURE)"; exit 1; } @if cmp -s $(OUT)/smoke.cs.s $(OUT)/smoke.ww.s; then \ echo "smoke OK: cs == ww .s for $(FIXTURE) (`wc -l < $(OUT)/smoke.cs.s` lines)"; \ else \ echo "smoke FAIL: cs != ww .s for $(FIXTURE)"; \ diff -u $(OUT)/smoke.cs.s $(OUT)/smoke.ww.s | head -40; \ exit 1; \ fi install: all mkdir -p $(PREFIX)/bin $(PREFIX)/lib cp $(BIN)/ww $(PREFIX)/bin/ cp $(LIB)/libwcc.a $(PREFIX)/lib/ clean: rm -rf $(OUT) # ---- bootstrap (phase 10) ---------------------------------------------- # Four-stage self-host: Cstage (these C tools) → ww1 → ww2 → ww3 → ww4 # with cmp ww2 == ww3 and cmp ww3 == ww4. Stage 1 is wwdump_ww (the # ww-built frontend); stages 2/3/4 assemble with w6a_ww and link with # w6l_ww — every tool below the driver is now in ww. The C `ww` driver # still orchestrates the pipeline (porting it is the remaining phase-10 # work). # # Why a fourth stage? Stage 3 proves ww1 and ww2 (which differ in how # they were built) emit the same machine code. Stage 4 proves ww3 is # byte-stable when used as a compiler — i.e. the fixed point is truly # fixed, not merely a coincidental two-stage equilibrium. BS = $(OUT)/bootstrap bootstrap: all @echo "=== stage 0 (Cstage): C-built tools ===" @echo " $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l" @echo @echo "=== stage 1: ww-built tools, used to drive stages 2/3/4 ===" @ls -l $(BIN)/wwdump_ww $(BIN)/w6a_ww $(BIN)/w6l_ww $(BIN)/ww_ww @rm -rf $(BS) && mkdir -p $(BS) @echo @echo "=== stage 2: ww2 = ww1 self-compiles main.combined.ww ===" @$(BIN)/wwdump_ww -c selfhost/cmd/wwdump/main.combined.ww > $(BS)/ww2.s @$(BIN)/w6a_ww -o $(BS)/ww2.o $(BS)/ww2.s @$(BIN)/w6l_ww -o $(BS)/ww2 $(BS)/ww2.o $(LIB)/libwwrt.a @ls -l $(BS)/ww2 @echo @echo "=== stage 3: ww3 = ww2 self-compiles main.combined.ww ===" @$(BS)/ww2 -c selfhost/cmd/wwdump/main.combined.ww > $(BS)/ww3.s @$(BIN)/w6a_ww -o $(BS)/ww3.o $(BS)/ww3.s @$(BIN)/w6l_ww -o $(BS)/ww3 $(BS)/ww3.o $(LIB)/libwwrt.a @ls -l $(BS)/ww3 @echo @echo "=== stage 4: ww4 = ww3 self-compiles main.combined.ww ===" @$(BS)/ww3 -c selfhost/cmd/wwdump/main.combined.ww > $(BS)/ww4.s @$(BIN)/w6a_ww -o $(BS)/ww4.o $(BS)/ww4.s @$(BIN)/w6l_ww -o $(BS)/ww4 $(BS)/ww4.o $(LIB)/libwwrt.a @ls -l $(BS)/ww4 @echo @echo "=== fixed-point gates ===" @cmp $(BS)/ww2.s $(BS)/ww3.s && echo " ww2.s == ww3.s ✓" @cmp $(BS)/ww2.o $(BS)/ww3.o && echo " ww2.o == ww3.o ✓ (byte-identical .o)" @cmp $(BS)/ww2 $(BS)/ww3 && echo " ww2 == ww3 ✓ (byte-identical exe)" @cmp $(BS)/ww3.s $(BS)/ww4.s && echo " ww3.s == ww4.s ✓" @cmp $(BS)/ww3.o $(BS)/ww4.o && echo " ww3.o == ww4.o ✓ (byte-identical .o)" @cmp $(BS)/ww3 $(BS)/ww4 && echo " ww3 == ww4 ✓ (byte-identical exe, ww3 is byte-stable as a compiler)" @echo @echo "BOOTSTRAP OK: ww-cgen + w6a_ww + w6l_ww reach a fixed point that holds across two iterations." @echo @echo "Phase 10 remaining work:" @echo " - delete cmd/wcc/ cmd/w6c/ cmd/w6a/ cmd/w6l/ cmd/ww/ in the final commit" @echo @echo "Already in selfhost/:" @echo " - cmd/wcc/ : ww-cgen (lex/parse/check/cgen) — bootstrap fixed point" @echo " - cmd/w6c/ : ww-w6c (lex/parse/cgen front-end) — matches wwdump_ww -c (test 994)" @echo " - cmd/w6a/ : ww-w6a (lex/parse/asm/obj) — byte-identical to C w6a (test 991)" @echo " - cmd/w6l/ : ww-w6l (linker w/ archive support) — byte-identical to C w6l (test 992)" @echo " - cmd/ww/ : ww-driver (build/run/version) — byte-identical to C ww (test 993)" # ---- nocc: bootstrap from a checked-in stage-0 binary, no cc ----------- # A fresh-checkout flow that never invokes cc. Mirrors `make bootstrap`'s # fixed-point check but uses `bootstrap/$(ARCH)/{ww,w6c,w6a,w6l}` as the # starting point and lands in $(OUT)/nocc/ so the cstage build under # $(OUT)/ stays untouched. See bootstrap/README.md and BOOTSTRAP.md. # # `make bootstrap-snapshot` populates bootstrap/$(ARCH)/ from the # currently-built wwstage so you can verify locally before deciding # to commit the binaries. ARCH ?= amd64 STAGE0 = bootstrap/$(ARCH) NOCC_OUT = $(OUT)/nocc NOCC_BIN = $(NOCC_OUT)/bin NOCC_LIB = $(NOCC_OUT)/lib NOCC_OBJ = $(NOCC_OUT)/obj bootstrap-snapshot: wwstage @mkdir -p $(STAGE0) @cp $(BIN)/ww_ww $(STAGE0)/ww @cp $(BIN)/w6c_ww $(STAGE0)/w6c @cp $(BIN)/w6a_ww $(STAGE0)/w6a @cp $(BIN)/w6l_ww $(STAGE0)/w6l @echo "snapshot: $(STAGE0)/{ww,w6c,w6a,w6l} populated from $(BIN)/*_ww" @echo " (gitignored — 'git add -f bootstrap/$(ARCH)/*' to ship)" nocc: @for f in ww w6c w6a w6l; do \ test -x $(STAGE0)/$$f || { \ echo "$@: missing $(STAGE0)/$$f"; \ echo "$@: run 'make bootstrap-snapshot' first, or read bootstrap/README.md"; \ exit 1; \ }; \ done @echo "=== nocc: starting from $(STAGE0) (no cc invoked) ===" @rm -rf $(NOCC_OUT) @mkdir -p $(NOCC_BIN) $(NOCC_LIB) $(NOCC_OBJ) @# Stage 0: drop bootstrap binaries under both natural names and @# the _ww-suffixed names the driver expects when shelling out. @for f in ww w6c w6a w6l; do \ cp $(STAGE0)/$$f $(NOCC_BIN)/$$f; \ cp $(STAGE0)/$$f $(NOCC_BIN)/$${f}_ww; \ done @# Assemble libwwrt.a using stage-0 w6a — the linker needs it for @# every wwstage-built binary in the next stage. Member order @# follows $(RT_S) so the embedded symbol table matches the @# cstage-built libwwrt.a (cstage uses ar rcs $(RT_OBJ), same @# order). @objs=""; for s in $(RT_S); do \ b=`basename $$s .s`; \ $(NOCC_BIN)/w6a -o $(NOCC_OBJ)/$$b.o $$s; \ objs="$$objs $(NOCC_OBJ)/$$b.o"; \ done; $(AR) rcs $(NOCC_LIB)/libwwrt.a $$objs @echo "=== stage 1: stage-0 rebuilds the wwstage tools from source ===" @# The driver's default lib path is $self_dir/../../lib — under @# $(NOCC_BIN) that resolves to $(NOCC_OUT)/lib (libwwrt only). @# Pass -I $(CURDIR)/lib so `use os` etc. resolve to source. @cd $(NOCC_BIN) && ./ww build \ -I $(CURDIR)/lib/ww \ -I $(CURDIR)/lib/ww/lex \ -I $(CURDIR)/lib/ww/parse \ -I $(CURDIR)/selfhost/cmd/wcc \ -I $(CURDIR)/lib $(CURDIR)/selfhost/cmd/w6c/main.ww && mv main w6c_ww1 @cd $(NOCC_BIN) && ./ww build -I $(CURDIR)/selfhost/cmd/w6a \ -I $(CURDIR)/selfhost/cmd/wcc -I $(CURDIR)/lib \ $(CURDIR)/selfhost/cmd/w6a/main.ww && mv main w6a_ww1 @cd $(NOCC_BIN) && ./ww build -I $(CURDIR)/selfhost/cmd/w6l \ -I $(CURDIR)/selfhost/cmd/wcc -I $(CURDIR)/lib \ $(CURDIR)/selfhost/cmd/w6l/main.ww && mv main w6l_ww1 @cd $(NOCC_BIN) && ./ww build -I $(CURDIR)/selfhost/cmd/wcc \ -I $(CURDIR)/lib $(CURDIR)/selfhost/cmd/ww/main.ww && mv main ww_ww1 @echo "=== fixed-point gates: rebuilt tools == stage-0 binaries? ===" @cmp $(NOCC_BIN)/w6c_ww1 $(STAGE0)/w6c && echo " w6c ✓" @cmp $(NOCC_BIN)/w6a_ww1 $(STAGE0)/w6a && echo " w6a ✓" @cmp $(NOCC_BIN)/w6l_ww1 $(STAGE0)/w6l && echo " w6l ✓" @cmp $(NOCC_BIN)/ww_ww1 $(STAGE0)/ww && echo " ww ✓" @echo @echo "NOCC OK: $(STAGE0)/* reproduces itself from source. cc not invoked." .PHONY: all cstage wwstage test test-unit test-commit smoke sizelint peellint install clean bootstrap nocc bootstrap-snapshot