From aaa50db3bd0d1f783f6f2db5da26e3e8fbae12f3 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Fri, 5 Jun 2015 14:33:09 -0700 Subject: Make INT32_MIN%-1 trap. It doesn't actually overflow, but the corresponding division overflows, so even though we could define it to be correct, it isn't especially useful. Also, this operation is UB in C and LLVM. --- AstSemantics.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'AstSemantics.md') diff --git a/AstSemantics.md b/AstSemantics.md index 04baf1a..c2bc466 100644 --- a/AstSemantics.md +++ b/AstSemantics.md @@ -307,7 +307,8 @@ and 0 representing false. * Int32Ule - unsigned less than or equal Division or remainder by zero traps. -Signed division overflow (e.g. INT32_MIN/-1) traps. +Signed division overflow (INT32_MIN/-1) and the corresponding signed +remainder operation (INT32_MIN%-1) trap. Shifts interpret their shift count operand as an unsigned value. When the shift count is at least the bitwidth of the shift, Shl and Shr return 0, -- cgit v1.2.3