[GHC] #14754: -O1 changes result at runtime
GHC
ghc-devs at haskell.org
Sat Feb 3 18:26:31 UTC 2018
#14754: -O1 changes result at runtime
-------------------------------------+-------------------------------------
Reporter: Bodigrim | Owner: (none)
Type: bug | Status: new
Priority: highest | Milestone: 8.4.1
Component: Compiler | Version: 8.4.1-alpha1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Incorrect result | Unknown/Multiple
at runtime | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by bgamari):
* priority: high => highest
* milestone: => 8.4.1
Old description:
> I found a program, which works as expected in GHC 8.4.1-alpha1 with
> `-O0`, but freezes with `-O1`.
>
> {{{
> module Main where
>
> import Debug.Trace
>
> main :: IO ()
> main = print (alg 3 1)
>
> alg :: Word -> Word -> Word
> alg a b
> | traceShow (a, b) False = undefined
> | c < b = alg b c
> | c > b = alg c b
> | otherwise = c
> where
> c = a - b
> }}}
>
> {{{
> $ ghc --version
> The Glorious Glasgow Haskell Compilation System, version 8.4.0.20180118
> $ ghc -O0 alg.hs
> [1 of 1] Compiling Main ( alg.hs, alg.o )
> Linking alg ...
> $ ./alg
> (3,1)
> (2,1)
> 1
> $ ghc -O1 alg.hs
> [1 of 1] Compiling Main ( alg.hs, alg.o ) [Optimisation flags
> changed]
> Linking alg ...
> $ ./alg 2>&1 | head
> (3,1)
> (1,2)
> (2,18446744073709551615)
> (18446744073709551615,3)
> ^C
> }}}
>
> For some reason an optimised program chooses a wrong case at the very
> first invocation of `alg`.
New description:
I found a program, which works as expected in GHC 8.4.1-alpha1 with `-O0`,
but freezes with `-O1`.
{{{#!hs
module Main where
import Debug.Trace
main :: IO ()
main = print (alg 3 1)
alg :: Word -> Word -> Word
alg a b
| traceShow (a, b) False = undefined
| c < b = alg b c
| c > b = alg c b
| otherwise = c
where
c = a - b
}}}
{{{
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 8.4.0.20180118
$ ghc -O0 alg.hs
[1 of 1] Compiling Main ( alg.hs, alg.o )
Linking alg ...
$ ./alg
(3,1)
(2,1)
1
$ ghc -O1 alg.hs
[1 of 1] Compiling Main ( alg.hs, alg.o ) [Optimisation flags
changed]
Linking alg ...
$ ./alg 2>&1 | head
(3,1)
(1,2)
(2,18446744073709551615)
(18446744073709551615,3)
^C
}}}
For some reason an optimised program chooses a wrong case at the very
first invocation of `alg`.
--
Comment:
Yikes! Thank you for catching this.
I guess this means my plans for another alpha release today are on hold.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14754#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list