
#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: Type of failure: Building GHC | Unknown/Multiple failed | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by rwbarton): It also gives a core lint error as early as 7.10.1. I found that early on the simplifier produces {{{ case x_a3Iw of x_X3IE { __DEFAULT -> ... case GHC.Prim.tagToEnum# @ Bool (reallyUnsafePtrEquality# @ a x_X3IE y_a3IA) of { ... } } }}} This is apparently okay: the application of `tagToEnum#` to the `reallyUnsafePtrEquality#` call is okay because `reallyUnsafePtrEquality#` is safe for speculation and the arguments `x_X3IE` and `y_a3IA` are known to be evaluated (`x_X3IE` came from evaluating the scrutinee of a case and `y_a3IA` came from the strict field of `Bin`). However the FloatOut pass does a "binder swap" (https://github.com/ghc/ghc/blob/master/compiler/simplCore/SetLevels.hs#L37) where it turns the reference to `x_X3IE` into a reference to `x_a3Iw`. Now `x_a3Iw` is not known to be evaluated so `reallyUnsafePtrEquality#` is no longer considered to be safe for speculation. (Even though `reallyUnsafePtrEquality#` doesn't actually evaluate its arguments.) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13027#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler