aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-12-05 12:54:27 +0100
committerlemon <lsof@mailbox.org>2025-12-05 12:54:27 +0100
commitb9f8820efcd62ef666afb2eaabd07e48eae38279 (patch)
treee8ba165343da5558233e295cd56fc6bc3ba9fc5d
parent78333412a9b502ebd04306ecfd71b0db216d51c7 (diff)
ir: float fold div/0
-rw-r--r--ir/fold.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/ir/fold.c b/ir/fold.c
index b45aa38..f5150c0 100644
--- a/ir/fold.c
+++ b/ir/fold.c
@@ -58,7 +58,6 @@ foldflt(enum op op, enum irclass k, union ref lr, union ref rr)
int xi;
double x, l = fltconval(lr), r = fltconval(rr);
bool w = k == KF64;
- if (in_range(op, Odiv, Ourem)) assert(r != 0.0);
switch (op) {
case Ocopy: x = l; break;
case Oneg: x = -l; break;
@@ -88,11 +87,11 @@ foldflt(enum op op, enum irclass k, union ref lr, union ref rr)
bool
foldbinop(union ref *to, enum op op, enum irclass k, union ref l, union ref r)
{
- if (!isnumcon(l) || !isnumcon(r)) return 0;
- if (in_range(op, Odiv, Ourem) && (kisint(k) ? intconval(r) == 0 : fltconval(r) == 0))
- return 0;
if (!oisarith(op))
return 0;
+ if (!isnumcon(l) || !isnumcon(r)) return 0;
+ if (in_range(op, Odiv, Ourem) && kisint(k) && intconval(r) == 0)
+ return 0;
if (kisint(k))
*to = foldint(op, k, l, r);
else