From c043227bf792fd341cd19f40cd96b7577dacbd5a Mon Sep 17 00:00:00 2001 From: Andrew Chambers Date: Wed, 27 Feb 2019 22:10:17 +1300 Subject: Let runtime crash on zero div, don't fold it. Remarks from Quentin: It is an important decision to use Bot and not Top as the result of 'x / 0'. By using Bot, we refuse to give a warrant to the compiler that would allow meaningless subsequent decisions. An example follows. Clang, on my computer, will build a program which prints "Ho" when fed the following C: int main() { puts(1/0 ? "Hi" : "Ho"); } On the other hand, a C compiler based on QBE will build a program which crashes, as one would expect. See also https://c9x.me/notes/2014-09-10.html --- fold.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'fold.c') diff --git a/fold.c b/fold.c index 8fc64c5..019b739 100644 --- a/fold.c +++ b/fold.c @@ -500,7 +500,7 @@ opfold(int op, int cls, Con *cl, Con *cr, Fn *fn) if ((op == Odiv || op == Oudiv || op == Orem || op == Ourem) && czero(cr, KWIDE(cls))) - err("null divisor in '%s'", optab[op].name); + return Bot; if (cls == Kw || cls == Kl) { if (foldint(&c, op, cls == Kl, cl, cr)) return Bot; -- cgit 1.4.1