From 7e3271bf018b5b34e624cb148ee69b86ec1f15b7 Mon Sep 17 00:00:00 2001 From: Hojun-Cho Date: Tue, 2 Jun 2026 03:01:10 +0900 Subject: [PATCH] test/949: add non-u8 addr-of + slice-via-ptr rows (#252) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 7-row table covered u8 addr-of (local + *struct param) and the non-u8 stride only on the slice path. Two coverage gaps closed: addr_i32 &x.o[2] on a [4]i32 field, *p read -> 88. The addr-of complex-base arm scales the index by esz=sizeof(elem) independent of the base-address path; only u8 (esz=1) rows exercised it before. Proves IMULQ $4 stride composes with the dotbaseaddr LEAQ base. slice_ptr_u8 x.o[1:4] via a *e param. dotbaseaddr's viaptr arm (MOVQ (BP) deref) on the slice base was untested — all slice rows used a value-struct (LEAQ) base. Both run-correct + cs==ww byte-identical. --- test/wcc/949_dotbase_addr_slice_run.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/wcc/949_dotbase_addr_slice_run.c b/test/wcc/949_dotbase_addr_slice_run.c index 4d83a46e..0eb6fff5 100644 --- a/test/wcc/949_dotbase_addr_slice_run.c +++ b/test/wcc/949_dotbase_addr_slice_run.c @@ -24,8 +24,10 @@ * for rule-10 byte-id): * - addr_local_u8 &x.o[1] on a local value-struct, *p read → 66 * - addr_ptr_u8 &x.o[2] via a *struct param, *p read → 77 + * - addr_i32 &x.o[2] on [4]i32 field, *p read (esz=4) → 88 * - slice_u8_expl x.o[1:4] explicit hi, s[0] read → 66 * - slice_u8_dflthi x.o[1:] default hi, s[0] read → 66 + * - slice_ptr_u8 x.o[1:4] via a *struct param, s[0] read → 66 * - slice_i32_expl [4]i32 field x.o[1:3], s[1] read (esz=4) → 88 * - slice_i32_dflt [4]i32 field x.o[1:], s[2] read (esz=4) → 55 * - control_bare bare-local [4]u8 &a[1] write + a[1:4] read → 44 @@ -71,6 +73,15 @@ static const struct row rows[] = { " x.o[2] = 77u8;\n" " return rd(&x): i32;\n" "};\n", 77 }, + { "addr_i32", + "package main;\n" + "type e = struct { o: [4]i32 };\n" + "export fn main() i32 = {\n" + " let x: e;\n" + " x.o[2] = 88;\n" + " let p: *i32 = &x.o[2];\n" + " return *p;\n" + "};\n", 88 }, { "slice_u8_expl", "package main;\n" "type e = struct { o: [4]u8 };\n" @@ -89,6 +100,15 @@ static const struct row rows[] = { " let s: []u8 = x.o[1:];\n" " return s[0]: i32;\n" "};\n", 66 }, + { "slice_ptr_u8", + "package main;\n" + "type e = struct { o: [4]u8 };\n" + "fn sl(x: *e) u8 = { let s: []u8 = x.o[1:4]; return s[0]; };\n" + "export fn main() i32 = {\n" + " let x: e;\n" + " x.o[1] = 66u8;\n" + " return sl(&x): i32;\n" + "};\n", 66 }, { "slice_i32_expl", "package main;\n" "type e = struct { o: [4]i32 };\n"