diff --git a/lib/fnmatch/fnmatch.ww b/lib/fnmatch/fnmatch.ww index f5fd9a33..b18235ed 100644 --- a/lib/fnmatch/fnmatch.ww +++ b/lib/fnmatch/fnmatch.ww @@ -123,7 +123,8 @@ fn pat_next(pat: str, pos: *i32, fl: flag) (u8 | star | question | bracket | end *pos += 1; return c2; }; - return '\\'; + // #29: wwstage over-rejects the implicit flexible-rune-const narrow (harec promote_flexible accepts); explicit cast until flexible-const promotion lands — revert to bare '\\' then. + return '\\': u8; }; return c; }; diff --git a/test/wcc/989_lib_byteid.c b/test/wcc/989_lib_byteid.c index 3d4d85fa..1b08296a 100644 --- a/test/wcc/989_lib_byteid.c +++ b/test/wcc/989_lib_byteid.c @@ -154,8 +154,12 @@ static const struct ent ents[] = { /* -------- wwstage front-end gaps (task #59) -------------- */ { .fixture = "lib/crypto/sha256/sha256_test.ww", .mode = M_WWREJECT, .cite = "#59.13" }, + /* #59.14 graduated to M_ID by #27: the #27b enum-as-int cgen fix + * (value passthrough, not a tagged assertion) + the fnmatch.ww:126 + * `'\\': u8` explicit cast (the rune-lit→u8 narrow w6c_ww rejects at + * a checked position) make w6c_ww compile fnmatch byte-identically. */ { .fixture = "lib/fnmatch/fnmatchtest.ww", - .mode = M_WWREJECT, .cite = "#59.14" }, + .mode = M_ID, .cite = "#59.14 graduated by #27" }, /* #59.15 shlex graduated to M_ID by B-full Layer 1 (#14 nominal * typeeqast): the cross-module bare-vs-qualified variant forward * w6c_ww over-rejected now compiles byte-identically. */