Shake fails test with GHC 7.10 RC3

Simon Peyton Jones simonpj at
Wed Mar 18 17:04:35 UTC 2015

I'm really sorry but I can't think of anything.  Sounds horrible.  

If you throw exceptions using 'error' (not in IO), then you are of course vulnerable to strictness changes.  If the thing isn't actually evaluated inside the catch block, you won't see the exception.  But I'm sure you've thought of that.

I'd experiment with one of the smaller changes you describe, such as adding a putStrLn, and comparing Core, before and after.  Switching off -O will make a huge difference, so hard to compare.  Turning off the state hack will have a more global effect.  But the other changes sound more pin-point and hence the differences will be smaller.


|  -----Original Message-----
|  From: ghc-devs [mailto:ghc-devs-bounces at] On Behalf Of Neil
|  Mitchell
|  Sent: 18 March 2015 15:33
|  To: ghc-devs at
|  Subject: Shake fails test with GHC 7.10 RC3
|  Hi,
|  Testing GHC 7.10 RC3 I've found a bug where Shake seems to catch the
|  wrong exception in the wrong place. It's only hit by one of my tests,
|  and I've managed to isolate it to a fragment of code with no
|  unsafePerformIO, that throws exceptions using error (so not in IO), and
|  operates in IO. Turning off the stack hack makes the bug go away, but
|  then so does -O0, marking one of the functions it calls NOINLINE, or
|  moving an INLINE function it calls to a different module, or adding a
|  putStrLn under a catch block - it's very sensitive to the exact
|  conditions. This test and this exact code worked fine with GHC 7.10
|  RC2.
|  I was wondering if there have been any state hack related changes or
|  other potentially dangerous optimisation changes since RC2? I'll
|  continue to try reducing the bug, but it's somewhat difficult as the
|  larger system is quite big, and the code is very sensitive.
|  Thanks, Neil
|  _______________________________________________
|  ghc-devs mailing list
|  ghc-devs at

More information about the ghc-devs mailing list