
#9451: Incorrect optimizations involving negative zero -------------------------------------+------------------------------------- Reporter: manzyuk | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.8.3 Keywords: | Operating System: Architecture: Unknown/Multiple | Unknown/Multiple Difficulty: Unknown | Type of failure: Incorrect Blocked By: | result at runtime Related Tickets: | Test Case: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- The program {{{#!hs main = print $ if negativeZero == 0.0 then 1 / negativeZero else 0.0 where negativeZero = negate 0.0 }}} outputs `-Infinity` when compiled with GHC 7.6.3 and `Infinity` when compiled with GHC 7.8.3 and the optimization level -O2. The relevant pieces of Core: {{{ -- GHC 7.6.3 Main.main2 = case GHC.Prim.==## (GHC.Prim.negateDouble# 0.0) 0.0 of _ { GHC.Types.False -> Main.main3 (GHC.Types.[] @ GHC.Types.Char); GHC.Types.True -> case GHC.Prim./## 1.0 (GHC.Prim.negateDouble# 0.0) of wild2_aK6 { __DEFAULT -> GHC.Float.$w$sshowSignedFloat GHC.Float.$fShowDouble_$sshowFloat GHC.Show.shows26 wild2_aK6 (GHC.Types.[] @ GHC.Types.Char) } } }}} {{{ -- GHC 7.8.3 Main.main2 = case GHC.Prim.negateDouble# 0.0 of _ [Occ=Dead] { __DEFAULT -> Main.main3 (GHC.Types.[] @ GHC.Types.Char); 0.0 -> case GHC.Prim./## 1.0 0.0 of wild2_a1NU { __DEFAULT -> GHC.Float.$w$sshowSignedFloat GHC.Float.$fShowDouble_$sshowFloat GHC.Show.shows27 wild2_a1NU (GHC.Types.[] @ GHC.Types.Char) } } }}} I don't think this problem is operating system/architecture dependent, but for the sake of completeness I'm on a 32-bit Linux, and this issue was first discovered on 64-bit Windows running in a virtual machine. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9451 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler