
#10504: GHC panics with dsImpSpecs on SPECIALISE pragma with -fhpc enabled -------------------------------------+------------------------------------- Reporter: nh2 | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Code Coverage | Version: 7.10.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by nh2): Some more info, contributed by a colleague: In the minimal example provided: {{{ ghc --show-iface A.hi ... ef7b9ac4dd27cad757d7fad8ecd0592a myfun :: a {- Strictness: b, Inline: INLINABLE[ALWAYS] -} # actual end of file }}} The myfun function doesn't actually have an unfolding in the .hi interface file (there's no "Unfolding: ..." line). The seeming inconsistency with an import being marked INLINABLE but not having an unfolding is the root cause of the bug (see https://github.com/ghc/ghc/blob/45d9a15c4b85a2ed89579106bdafd84accf2cb39/com...). The hyper-strictness (ie “Strictness: b”, b for bottom a la undefined) is probably why the unfolding isn't retained in this minimal example. Anothere example of when the unfolding isn't retained is if you use `-fomit-inerface-pragmas`. My colleague's conclusion: These are two ways to trigger the same bug: GHC should not crash on a SPECIALIZE for an imported function that has no unfolding, regardless of why it has no unfolding. It would always be better to warn about the missing unfolding/useless SPECIALISE pragma and then ignore the SPECIALISE. Perhaps GHC should also warn about marking a hyperstrict definition as INLINABLE. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10504#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler