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.
This commit is contained in:
11
test/wcc/data/float_mod_reject/case.ww
Normal file
11
test/wcc/data/float_mod_reject/case.ww
Normal file
@@ -0,0 +1,11 @@
|
||||
//ww:error "modulo on non-integer type"
|
||||
// % is integer-only (harec check.c binarithm BIN_MODULO). Pre-gate a
|
||||
// float % half-lowered through cgen as a live cs!=ww divergence.
|
||||
package main;
|
||||
export fn main() i32 = {
|
||||
let a: f64 = 7.0;
|
||||
let b: f64 = 2.0;
|
||||
let m: f64 = a % b;
|
||||
if (m == 1.0) { return 1; };
|
||||
return 0;
|
||||
};
|
||||
Reference in New Issue
Block a user