
#13027: Core lint errors compiling containers HEAD with GHC HEAD -------------------------------------+------------------------------------- Reporter: erikd | Owner: Type: bug | Status: new Priority: normal | Milestone: 8.2.1 Component: Compiler | Version: 8.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: Building GHC | Test Case: failed | simplCore/should_compile/T13027 Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by rwbarton): Evaluatedness matters because the let/app invariant says that an argument of an application of unlifted type should be ok for speculation. And an application of a primop `foo# bar baz` is only considered ok for speculation if `bar` and `baz` are known to be evaluated, since otherwise evaluating `foo# bar baz` might evaluate `bar` and `baz` which could diverge. Actually `reallyUnsafePtrEquality#` never evaluates its arguments but the ok for speculation check does not know that; and if it did then the real underlying issue would still not be solved. I'm guessing that the expression `tagToEnum# @ Bool (reallyUnsafePtrEquality# @ (Set a) ww_s4m3 l_a2PV)` was produced at an earlier stage when the first argument was known to be evaluated. Looks like it might have been before worker/wrapper, since `go` produces a `StrictPair` whose fields are known to be evaluated. But `(# , #)` can hold unevaluated things so w/w causes us to lose the information that `ww_s4m3` is evaluated. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13027#comment:19 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler