Commit c01d5af3 authored by Michael Sloan's avatar Michael Sloan Committed by Marge Bot

Extract out use of UnboxedTuples from GHCi.Leak

See #13101 + #15454 for motivation.  This change reduces the number of
modules that need to be compiled to object code when loading GHC into
GHCi.
parent cb61371e
{-# LANGUAGE RecordWildCards, LambdaCase, MagicHash, UnboxedTuples #-}
{-# LANGUAGE RecordWildCards, LambdaCase #-}
module GHCi.Leak
( LeakIndicators
, getLeakIndicators
......@@ -10,9 +10,8 @@ import Data.Bits
import DynFlags ( sTargetPlatform )
import Foreign.Ptr (ptrToIntPtr, intPtrToPtr)
import GHC
import GHC.Exts (anyToAddr#)
import GHC.Ptr (Ptr (..))
import GHC.Types (IO (..))
import GHCi.Util
import HscTypes
import Outputable
import Platform (target32Bit)
......@@ -64,8 +63,7 @@ checkLeakIndicators dflags (LeakIndicators leakmods) = do
report :: String -> Maybe a -> IO ()
report _ Nothing = return ()
report msg (Just a) = do
addr <- IO (\s -> case anyToAddr# a s of
(# s', addr #) -> (# s', Ptr addr #)) :: IO (Ptr ())
addr <- anyToPtr a
putStrLn ("-fghci-leak-check: " ++ msg ++ " is still alive at " ++
show (maskTagBits addr))
......
{-# LANGUAGE MagicHash, UnboxedTuples #-}
-- | Utilities for GHCi.
module GHCi.Util where
-- NOTE: Avoid importing GHC modules here, because the primary purpose
-- of this module is to not use UnboxedTuples in a module that imports
-- lots of other modules. See issue#13101 for more info.
import GHC.Exts
import GHC.Types
anyToPtr :: a -> IO (Ptr ())
anyToPtr x =
IO (\s -> case anyToAddr# x s of
(# s', addr #) -> (# s', Ptr addr #)) :: IO (Ptr ())
......@@ -72,6 +72,7 @@ Executable ghc
GHCi.UI.Info
GHCi.UI.Monad
GHCi.UI.Tags
GHCi.Util
Other-Extensions:
BangPatterns
FlexibleInstances
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment