
#14536: Ghc panics while building stage2 with -dstg-lint -------------------------------------+------------------------------------- Reporter: duog | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): Humph. The 'unarise' pass, which is performed on STG, also transforms types. In this case we transform {{{ case getMaskingState# eta of x { (# a, b #) -> blah ===> case getMaskingState# eta of x { Unit# a -> blah -- Unit# is really a one-tuple (# a #) }}} Here we eliminate the void field (the state token). But that changes the type of the scrutinee; but we don't in fact change the type of the case-binder `x`; and that in turn leads to the crash. It's not very convenient to get hold of `x`'s new type; and in any case `x` is guaranteed to be dead. So it seems hardly worth writing more code. Lets either * Simply drop the lint check (in `litAlt`, don't call `dataConInstArgTys`); or * Make the case-binder into a `Maybe` and only check its type when it's a `Just`. I suspect that the former is simpler for now; do leave a comment to link to this ticket though. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14536#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler