
#11444: 8.0 rc1 panics in applyTypeToArgs -------------------------------------+------------------------------------- Reporter: osa1 | Owner: Type: bug | Status: new Priority: normal | Milestone: 8.2.1 Component: Compiler | Version: 8.0.1-rc1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #13027 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by dfeuer): That looks like overkill, strictly speaking, but I could definitely believe that it doesn't matter. It looks like overkill because if we have {{{#!hs foo !x !y = case x of Con1 p -> let rup1 = reallyUnsafePtrEquality# x y in ... Con2 p -> let rup2 = reallyUnsafePtrEquality# x y in ... }}} then we can safely float out just a drop: {{{#!hs foo !x !y = let rup1 = reallyUnsafePtrEquality# x y rup2 = reallyUnsafePtrEquality# x y in case x of Con1 p -> ... Con2 p -> ... }}} and then CSE the duplication out. What I don't know is if such a thing will ever occur (or matter) in practice, or whether it would be a good idea even if it did. I can certainly make the change and add some notes. There are some interactions with some discussion in #13027. At present, anyway, `reallyUnsafePtrEquality#` is only considered "safe for speculation" when its arguments are known to be forced, which sounded really weird before, but isn't that precisely when it should be safe to float it out? OTOH, this ticket reveals another issue relating to polymorphic arguments, so maybe we should make the conservative change? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11444#comment:16 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler