diff options
Diffstat (limited to 'libraries/base/GHC/Conc/Sync.hs')
-rw-r--r-- | libraries/base/GHC/Conc/Sync.hs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/libraries/base/GHC/Conc/Sync.hs b/libraries/base/GHC/Conc/Sync.hs index de8ca8e5a0..d6ffbc2de9 100644 --- a/libraries/base/GHC/Conc/Sync.hs +++ b/libraries/base/GHC/Conc/Sync.hs @@ -117,6 +117,8 @@ import GHC.Show ( Show(..), showParen, showString ) import GHC.Stable ( StablePtr(..) ) import GHC.Weak +import Unsafe.Coerce ( unsafeCoerce# ) + infixr 0 `par`, `pseq` ----------------------------------------------------------------------------- @@ -621,6 +623,9 @@ data PrimMVar newStablePtrPrimMVar :: MVar () -> IO (StablePtr PrimMVar) newStablePtrPrimMVar (MVar m) = IO $ \s0 -> case makeStablePtr# (unsafeCoerce# m :: PrimMVar) s0 of + -- Coerce unlifted m :: MVar# RealWorld () + -- to lifted PrimMVar + -- apparently because mkStablePtr is not levity-polymorphic (# s1, sp #) -> (# s1, StablePtr sp #) ----------------------------------------------------------------------------- |