Shake fails test with GHC 7.10 RC3

Simon Peyton Jones simonpj at microsoft.com
Thu Mar 19 23:24:59 UTC 2015


Thanks!  I think a -ddump-simpl before and after the smallest change the makes the difference would be illuminating.

Simon

| -----Original Message-----
| From: Neil Mitchell [mailto:ndmitchell at gmail.com]
| Sent: 19 March 2015 23:07
| To: Simon Peyton Jones
| Cc: ghc-devs at haskell.org
| Subject: Re: Shake fails test with GHC 7.10 RC3
| 
| Herbert, thanks for the list of patches, nothing obvious there - my
| best guess is it's something incredibly sensitive and it only needs
| the tiniest change anywhere to make it happen. Things like moving
| NOINLINE monomorphic-type definitions from one module to another are
| causing the bug to appear/disappear, which isn't what I'd expect.
| 
| Simon, changing from error to error in IO causes the bug to disappear,
| but then so do most things. The error return type is type IO (), so I
| suspect that forces it to be raised at the right place - but it's
| certainly one of the possibilities for what is going wrong. Diffing
| the Core is a great idea.
| 
| I'll keep reducing and see what I get to. Given the sensitivity of the
| bug, I'm sure a NOINLINE on an out-of-the-way function will make it go
| away, so I can easily fix Shake itself - so I'm more tracking it down
| from the point of GHC now.
| 
| Thanks, Neil
| 
| 
| On Wed, Mar 18, 2015 at 5:04 PM, Simon Peyton Jones
| <simonpj at microsoft.com> wrote:
| > 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.
| >
| > Simon
| >
| > |  -----Original Message-----
| > |  From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of
| Neil
| > |  Mitchell
| > |  Sent: 18 March 2015 15:33
| > |  To: ghc-devs at haskell.org
| > |  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 haskell.org
| > |  http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


More information about the ghc-devs mailing list