Files
ww/test/lang/valstruct_subsize_test.ww
Hojun-Cho 83f5956df2 test: banner purge + WHY-only comment sweep (rule 8)
Every section banner dies (103 -> 0) across test/lang, the observer
suites, the C carriers, and the five comment-heavy corpus fixtures;
banner provenance (#N cites, carrier numbers, repair-cluster labels)
folded into headers or adjacent WHY comments. Narration deleted; row
provenance, ref cites, divergence pins, and layout contracts kept
(fwd-ref decl-order guards and bootstrap-gate corpus rationale
restored where the sweep over-cut). Comment-only proven: all 3742
wwbuild workdir .s byte-identical before/after; test-commit and
test-byteid (161 lang + 1399 data, 0 pinned-divergent) green.
2026-08-08 21:40:23 +09:00

71 lines
1.8 KiB
Plaintext

// Sub-8 nested value-struct zero-init extent, local +
// global, distinct byte asserts. Migrated from
// test/wcc/949_valstruct_subsize_run.c. A nested {[N]u8} value-struct of ABI
// size 1/2/4 once emitted a stray MOVQ $0 (local) / 8 zero DATA bytes (global)
// on wwstage that cstage didn't. cstage build+run was T1; cs==ww .s byte-id
// rides T2 (test-lang-byteid).
//
// The D1/D2 rows WRITE then READ a byte so the value is deterministic (the
// robust falsifiable dimension). The ctl_*_16 rows are the negative control: a
// >8 multi-word value-struct still zero-inits — a wrongly-suppressed >8 zero arm
// would read stack garbage (and diverge from the still-zeroing cstage on the T2
// byte-id, which is the real guarantee for the unwritten read).
package valstruct_subsize_test;
type in4 = struct { m: [4]u8 };
type ov4 = struct { i: in4 };
type in2 = struct { m: [2]u8 };
type ov2 = struct { i: in2 };
type in1 = struct { m: [1]u8 };
type ov1 = struct { i: in1 };
type in16 = struct { m: [16]u8 };
type ov16 = struct { i: in16 };
let G4: ov4;
let G2: ov2;
let G1: ov1;
let G16: ov16;
@test fn d1_local_4() void = {
let o: ov4;
o.i.m[0] = 66u8;
assert(o.i.m[0]: i32 == 66);
};
@test fn d1_local_2() void = {
let o: ov2;
o.i.m[1] = 55u8;
assert(o.i.m[1]: i32 == 55);
};
@test fn d1_local_1() void = {
let o: ov1;
o.i.m[0] = 44u8;
assert(o.i.m[0]: i32 == 44);
};
@test fn d2_global_4() void = {
G4.i.m[0] = 66u8;
assert(G4.i.m[0]: i32 == 66);
};
@test fn d2_global_2() void = {
G2.i.m[1] = 55u8;
assert(G2.i.m[1]: i32 == 55);
};
@test fn d2_global_1() void = {
G1.i.m[0] = 44u8;
assert(G1.i.m[0]: i32 == 44);
};
@test fn ctl_local_16() void = {
let o: ov16;
assert(o.i.m[7]: i32 == 0);
};
@test fn ctl_global_16() void = {
assert(G16.i.m[7]: i32 == 0);
};