
#11172: Turning on optimisations produces SEGFAULT or Impossible case alternative -------------------------------------+------------------------------------- Reporter: nh2 | Owner: bgamari Type: bug | Status: new Priority: highest | Milestone: 8.0.1 Component: Compiler | Version: 7.10.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by jscholl): Ok, I think the segfault boils down to: Somewhere something expects to only recieve a {{{Right}}} constructor and then gets passed a {{{Left}}}. Hence the pointer is tagged with a 1 but should be tagged with a 2, we add 6 to access the contents and read the wrong memory. I think this could be related to the previous bug (only that this time the simplifier removes the impossible case alternative, so we do not enter an exception but this segfault in the case). To test this I first tried to run the example with ghc-8.0-rc1, but somehow it does not typecheck... I just get {{{ [1 of 2] Compiling Module ( Module.hs, Module.o ) Module.hs:28:38: error: • Couldn't match kind ‘GHC.Prim.Any’ with ‘*’ When matching the kind of ‘Either [Char]’ • In the third argument of ‘runParser’, namely ‘onError’ In the expression: runParser (m v) [] onError Right In an equation for ‘parseEither’: parseEither m v = runParser (m v) [] onError Right where onError _ = Left "Error in " }}} ghc-7.10.3 works fine, though. So maybe this is another regression? I just though the fix would work best with a current ghc. Anyway, here's the code. It's not as short as last time, sadly. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11172#comment:29 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler