diff --git a/ghc/lib/exts/IOExts.lhs b/ghc/lib/exts/IOExts.lhs
index 04f539d43a38c3ef1c506782f6038e4c7d68b4d3..b973fa6fa0f9882402880174129606550ed5d803 100644
--- a/ghc/lib/exts/IOExts.lhs
+++ b/ghc/lib/exts/IOExts.lhs
@@ -23,6 +23,8 @@ module IOExts
         , readIORef
         , writeIORef
 
+	, mkWeakIORef
+
 	, IOArray	-- instance of: Eq
 	, newIOArray
 	, boundsIOArray
@@ -71,6 +73,7 @@ import PrelHandle ( openFileEx, IOModeEx(..),
 		  )
 import PrelST
 import PrelArr
+import PrelWeak
 import PrelGHC
 import PrelHandle
 import PrelErr
@@ -109,6 +112,10 @@ newIORef v = stToIO (newVar v) >>= \ var -> return (IORef var)
 readIORef  (IORef var) = stToIO (readVar var)
 writeIORef (IORef var) v = stToIO (writeVar var v)
 #endif
+
+mkWeakIORef :: IORef a -> IO () -> IO (Weak (IORef a))
+mkWeakIORef r@(IORef (MutableVar r#)) f = IO $ \s ->
+  case mkWeak# r# r f s of (# s1, w #) -> (# s1, Weak w #)
 \end{code}
 
 \begin{code}