ghc 8.4.1 and trac 13930

Evan Laforge qdunkan at
Wed May 2 18:39:03 UTC 2018

Ok, here's a short module:

import qualified Control.Exception as Exception

main :: IO ()
main = do
    putStrLn "all is well"

unserialize :: IO Char
unserialize =
    if definitelyTrue
        then do
            return 'a'
        else do
            Exception.evaluate (error "wrong place")

{-# NOINLINE definitelyTrue #-}
definitelyTrue :: Bool
definitelyTrue = True

When compiled with -O on 8.4.1, this should print "wrong place".
Without -O, or with 8.4.2, or if True can be inlined, or without
evaluate, all is well.

More information about the ghc-devs mailing list