
#13233: typePrimRep panic while compiling GHC with profiling -------------------------------------+------------------------------------- Reporter: bgamari | Owner: Type: bug | Status: new Priority: highest | Milestone: 8.2.1 Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple crash or panic | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by bgamari): Ahhh, here we have the issue. CorePrep is trying to prepare, {{{#!hs $fHasDynFlagsFCode2 :: CgInfoDownwards -> CgState -> (# CgInfoDownwards, CgState #) $fHasDynFlagsFCode2 = (tick<getInfoDown> (#,#)) @ 'LiftedRep @ 'LiftedRep @ CgInfoDownwards @ CgState }}} At first glance there is nothing particularly alarming about this. However, note the tick around `(#,#)`: this is quite bad since it cuts the `(#,#)` off from its `RuntimeRep` applications, making the whole expression appear much more polymorphic than it really is in `CorePrep.cpeApp`. Specifically, we first `collect_args` on the whole expression yielding, {{{#!hs collect_args (tick<getInfoDown> (#,#)) @'LiftedRep @'LiftedRep @CgInfoDownwards @CgState == (tick<getInfoDown> (#,#), [ CpeApp 'LiftedRep, CpeApp 'LiftedRep, CpeApp CgInfoDownwards, CpeApp CgState ] ) }}} `cpe_app` then looks at the `tick<getInfoDown> (#,#)` to decide what to do next. Specifically, it wants to see a plain `Var`, but that's not what we have. Consequently we end up recursing via `cpeArg`, which will be deprived of knowledge of the `RuntimeRep` type applications. It's difficult to say what the right solution here is. I have yet to look into how we end up with the tick scoping over only the constructor; it's possible that the tick was pushed in too far. More coming. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13233#comment:14 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler