Files
ww/test/wcc/data/idx_compound_str_indexed/case.ww
Hojun-Cho f191e6e0e2 wcc: modulo is integer-only; compound ops carry their operand class
Hare's rule (harec check.c binarithm): % and the bitwise/shift five
are integer-only; + - * / need numeric operands. ww grouped % with
the numeric ops, and compound assigns never op-checked at all, so
`a % b` on floats compiled half-lowered (live cs!=ww divergence),
`a %= 2.0` plain-stored the rhs (op silently dropped, both stages),
and `s += "cd"` garbled str headers. Gate both at the checker, both
stages; the cgen float-compound fallbacks and the three unknown-
compound legacy defaults (deref/global/local) demote to rule-7 hard
stops. 34 compound-on-tagged/str/slice fixtures re-pin from the old
cgen "not wired" stops to the earlier checker diagnostics; 3 new
reject fixtures pin the closed shapes.
2026-08-09 00:32:41 +09:00

14 lines
558 B
Plaintext

//ww:error "arithmetic on non-numeric type"
// Lifted from test/wcc/948_idx_compound_run.c reject row "he_str_indexed"
// (#133-expanded rule-7): a compound assign on an indexed STR element is
// unwired in both stages and MUST loud-fail. The substring is the FULL shared
// diagnostic body — byte-identical on both stages — pinned to "str element" so
// it cannot also match the float row (no file:line / "ww: " prefix, which
// differ cs vs ww).
package main;
export fn main() i32 = {
let a: [4]str = ["a", "b", "c", "d"];
a[0] += "x";
return 0;
};