id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	os	architecture	failure	difficulty	testcase	blockedby	blocking	related
1042	Floating point exception	dons	igloo	"The slightly evil expression:
{{{
(-2147483648::Int) `div` (-1::Int)
}}}

Can produce floating point exceptions in GHCi:

{{{
$ ghci-6.6 
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.6, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base ... linking ... done.
Prelude> (-2147483648::Int) `div` (-1::Int)
zsh: floating point exception (core dumped)  ghci-6.6
}}}

Compiled:

{{{
$ cat A.hs
main = print $ (-2147483648::Int) `div` (-1::Int)

$ ghc A.hs

$ ./a.out 
zsh: floating point exception (core dumped)  ./a.out
}}}

Compiled -O:
{{{
$ ghc -O -no-recomp A.hs

$ ./a.out               
zsh: floating point exception (core dumped)  ./a.out
}}}

In Hugs:
{{{
Hugs.Base> (-2147483648::Int) `div` (-1::Int)
Unexpected signal
}}}

A C test cases:
{{{
$ cat t.c
#include <stdio.h>

int main() {
    printf(""%d\n"",((int)(-2147483648)) / ((int)(-1)));
    return 0;
}

$ gcc t.c
t.c: In function `main':
t.c:4: warning: this decimal constant is unsigned only in ISO C90
t.c:4: warning: integer overflow in expression

$ ./a.out 
-2147483648
}}}

Another:
{{{
$ cat t.c
#include <stdio.h>

main () {
    int i = -2147483648;
    int j = -1;
    int k = i / j;
    printf(""%d\n"", k);
}

$ gcc t.c
t.c: In function `main':
t.c:4: warning: this decimal constant is unsigned only in ISO C90

$ ./a.out 
zsh: floating point exception (core dumped)  ./a.out
}}}

What does H98 say about this?

-- Don"	merge	closed	normal	6.6.1	Compiler	6.6	fixed			Unknown/Multiple	x86		Unknown				
