Skip to content

Turning on optimisations produces SEGFAULT or Impossible case alternative

I believe I've found a bug that makes GHC generate the "Impossible case alternative" run-time crash with optimisations turned on (-O), which does not happen in ghci or without optimisations (-O0).

Please see

https://github.com/fpco/impossible-case-alternative-repro

for a reproduction with GHC 7.10 and 7.8.

What seems to happen here is that when fun2 is inlined, the simplifier (or whatever component) decides that some case (I haven't figured out yet which one) is impossible; you can clearly see how it gets fixed in the Core when adding a NOINLINE fun2 and compiling with -ddump-simpl. I believe this difference in inlining is also why -O makes a difference vs -O0.

What certainly surprised me is that when replacing

       (do p <- earlyExit <* error "bad"
           return p)

with

       (earlyExit <* error "bad")

the error goes away as well.

Note that I'm using some TemplateHaskell around that block; I'm wondering whether that somehow leads to an unfortunate interaction with the simpilifier.

First thing I'd appreciate is somebody to tell me: Is this a real bug or something GHC allows itself to do? Since for most other run-time errors, GHC asks me to report a bug, but it doesn't do so for Impossible case alternative.

I would have liked to make a smaller reproduction (currently it needs 2 files and aeson as an external depencency), but if I shrink it any further the error goes away. So for now I hope that a 150 line repro in 2 files will do.

We have reproduced this on Linux and Mac, but I'm quite confident that it's platform-independent.

I'm setting the milestone for this to 8.0.1 because this is a problem that makes some real-world trouble for us, feel free to change back if that's inappropriate.

Trac metadata
Trac field Value
Version 7.10.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC nh2
Operating system
Architecture
Edited by Niklas Hambüchen
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information