Skip to content
Snippets Groups Projects
Commit c01d5af3 authored by Michael Sloan's avatar Michael Sloan Committed by Marge Bot
Browse files

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
No related branches found
No related tags found
No related merge requests found
{-# 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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment