[GHC] #13458: Panic with unsafeCoerce and -dcore-lint
GHC
ghc-devs at haskell.org
Thu Mar 23 02:42:34 UTC 2017
#13458: Panic with unsafeCoerce and -dcore-lint
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner: goldfire
Type: bug | Status: new
Priority: normal | Milestone: 8.2.1
Component: Compiler (Type | Version: 8.1
checker) | Keywords:
Resolution: | LevityPolymorphism
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 goldfire):
I'm on it. Indeed, I believe I've fixed this, but need to rebuild to be
sure.
The problem is the checks from #9122 that try to make sure we're not
`unsafeCoerce`ing between types with incompatible representations. But
when we look to see about the representations involved here, the types
don't have representations, so GHC falls over.
What's annoying is that the user-written program is safe in this regard.
It's the coercion optimizer that rewrites an `unsafeCoerce` from a lifted
type to a lifted type (`Any -> Any` to `a -> b`) to two `unsafeCoerce`s
involving `a` and `b` separately. Thus, an alternate fix would be to have
the coercion optimizer look for precisely this scenario and avoid pushing
the unsafe coercion through the `->`. I haven't done this for two reasons:
1. Failing the checks from #9122 (which I've never fully agreed with) is
a sometimes-unavoidable consequence of a sketchy `unsafeCoerce`. The
workaround if you're in this scenario is not to use `-dcore-lint`. The
original program is pretty sketchy here, and so requiring that user to
avoid `-dcore-lint` may be reasonable.
2. It's quite annoying (and potentially computationally expensive) to do
this check in the coercion optimizer. The check is necessary only when the
user is willfully misbehaving, and the better citizens shouldn't have to
pay for it every time.
Regardless, GHC shouldn't panic.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13458#comment:9>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list