test: migrate structcopytail #73 struct-copy-tail family to test/lang @test, retire C twin (fold-2)
Continue fold-2: migrate the #73 whole-struct field-copy ragged-tail test from a bespoke build+run C twin to test/lang @test, retiring the twin in the same commit. Runtime coverage MOVES from $(TESTS) to test-lang (T1 runs+asserts via `ww test`) + test-lang-byteid (T2 keeps cs==ww .s byte-id); coverage is preserved, the $(TESTS) headline drops 1 (422->421). All four rows are pure value-rows (no reject rows): each poisons `mark` at the inner struct's natural offset, copies, then asserts every field back with primitive int comparisons, so an 8-byte MOVQ that over-writes the ragged-tail successor FAILS. 989_structcopytail_run.c -> structcopytail_test.ww (tail2/tail6/tail7 ragged-tail copy preserves mark; ctl8 8-aligned control) This is the only Family-3 file with no build-must-fail rows; the three compound-OP= twins (948_idx_compound, 949_dotfield_compound, 949_idxfield_compound) carry loud //ww:error reject rows a runtime @test cannot replicate and are DEFERRED to a fold-3 value-split + reject-carrier pass (they stay fully in $(TESTS), no coverage lost). Bump LANGBYTEID_EXPECTED_MIN 34->35 to ratchet the new corpus floor.
This commit is contained in:
19
Makefile
19
Makefile
@@ -273,7 +273,6 @@ TESTS = $(BIN)/test_smoke $(BIN)/test_lex $(BIN)/test_parse $(BIN)/test_check \
|
||||
$(BIN)/test_tagtupfieldsize_run \
|
||||
$(BIN)/test_nestfield_run \
|
||||
$(BIN)/test_structlocal_frame \
|
||||
$(BIN)/test_structcopytail_run \
|
||||
$(BIN)/test_arrlit_tail_zero_run \
|
||||
$(BIN)/test_allocalias_run \
|
||||
$(BIN)/test_slttypepref_run \
|
||||
@@ -898,22 +897,6 @@ $(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-
|
||||
@@ -3429,7 +3412,7 @@ test-lang: all
|
||||
LANGBYTEID_DIR = $(OUT)/langbyteid
|
||||
LANGBYTEID_FILES = $(wildcard test/lang/*_test.ww)
|
||||
LANGBYTEID_VERB = test -c
|
||||
LANGBYTEID_EXPECTED_MIN = 34
|
||||
LANGBYTEID_EXPECTED_MIN = 35
|
||||
$(if $(LANGBYTEID_FILES),,$(error test-lang-byteid: empty corpus))
|
||||
test-lang-byteid: all
|
||||
@set -e; \
|
||||
|
||||
Reference in New Issue
Block a user