summaryrefslogtreecommitdiff
path: root/libraries/base/GHC/Conc/Sync.hs
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/base/GHC/Conc/Sync.hs')
-rw-r--r--libraries/base/GHC/Conc/Sync.hs5
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 #)
-----------------------------------------------------------------------------