[commit: ghc] master: Nuke {save, restore}StaticFlagGlobals. (16c4011)
git at git.haskell.org
git
Wed Oct 9 15:59:12 UTC 2013
Repository : ssh://git at git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/16c401137a0d2aa803a5806493889056538c2de4/ghc
>---------------------------------------------------------------
commit 16c401137a0d2aa803a5806493889056538c2de4
Author: Austin Seipp <austin at well-typed.com>
Date: Wed Oct 9 10:47:06 2013 -0500
Nuke {save,restore}StaticFlagGlobals.
As discussed in #8276, this code was somewhat broken because while you
could always revert the actual argument list, you can never revert the
CAFs upon which they are based - so really this didn't buy you much.
However, Haddock in particular expects to be able to parse GHC flags,
including static flags, and used this code to do so. In its place, we
instead have discardStaticFlags, which will safely remove any of the
remaining 5 flags from a list of arguments. Haddock instead discards
these, as they aren't related to anything it does anyway (mostly
controlling debugging output and some basic optimizer phases.)
This fixes #8276. In the future, we will eventually completely remove
the remaining StaticFlags, removing the need for this fix. Unfortunately
these changes will be quite invasive and require more time.
Signed-off-by: Austin Seipp <austin at well-typed.com>
>---------------------------------------------------------------
16c401137a0d2aa803a5806493889056538c2de4
compiler/main/StaticFlags.hs | 31 ++++++++++++++++---------------
compiler/simplCore/CoreMonad.lhs | 10 ++++------
2 files changed, 20 insertions(+), 21 deletions(-)
diff --git a/compiler/main/StaticFlags.hs b/compiler/main/StaticFlags.hs
index c35b127..01dc3b7 100644
--- a/compiler/main/StaticFlags.hs
+++ b/compiler/main/StaticFlags.hs
@@ -18,6 +18,7 @@ module StaticFlags (
staticFlags,
initStaticOpts,
+ discardStaticFlags,
-- Output style options
opt_PprStyle_Debug,
@@ -31,9 +32,6 @@ module StaticFlags (
-- For the parser
addOpt, removeOpt, v_opt_C_ready,
- -- Saving/restoring globals
- saveStaticFlagGlobals, restoreStaticFlagGlobals,
-
-- For options autocompletion
flagsStatic, flagsStaticNames
) where
@@ -145,6 +143,21 @@ flagsStaticNames = [
"fcpr-off"
]
+-- We specifically need to discard static flags for clients of the
+-- GHC API, since they can't be safely reparsed or reinitialized. In general,
+-- the existing flags do nothing other than control debugging and some low-level
+-- optimizer phases, so for the most part this is OK.
+--
+-- See GHC issue #8267: http://ghc.haskell.org/trac/ghc/ticket/8276#comment:37
+discardStaticFlags :: [String] -> [String]
+discardStaticFlags = filter (\x -> x `notElem` flags)
+ where flags = [ "-fno-state-hack"
+ , "-fno-opt-coercion"
+ , "-fcpr-off"
+ , "-dppr-debug"
+ , "-dno-debug-output"
+ ]
+
initStaticOpts :: IO ()
initStaticOpts = writeIORef v_opt_C_ready True
@@ -189,18 +202,6 @@ opt_CprOff = lookUp (fsLit "-fcpr-off")
opt_NoOptCoercion :: Bool
opt_NoOptCoercion = lookUp (fsLit "-fno-opt-coercion")
------------------------------------------------------------------------------
--- Tunneling our global variables into a new instance of the GHC library
-
-saveStaticFlagGlobals :: IO (Bool, [String])
-saveStaticFlagGlobals = liftM2 (,) (readIORef v_opt_C_ready) (readIORef v_opt_C)
-
-restoreStaticFlagGlobals :: (Bool, [String]) -> IO ()
-restoreStaticFlagGlobals (c_ready, c) = do
- writeIORef v_opt_C_ready c_ready
- writeIORef v_opt_C c
-
-
{-
-- (lookup_str "foo") looks for the flag -foo=X or -fooX,
-- and returns the string X
diff --git a/compiler/simplCore/CoreMonad.lhs b/compiler/simplCore/CoreMonad.lhs
index a3f8e3b..6bcdbb0 100644
--- a/compiler/simplCore/CoreMonad.lhs
+++ b/compiler/simplCore/CoreMonad.lhs
@@ -777,11 +777,10 @@ data CoreReader = CoreReader {
cr_hsc_env :: HscEnv,
cr_rule_base :: RuleBase,
cr_module :: Module,
- cr_globals :: ((Bool, [String]),
#ifdef GHCI
- (MVar PersistentLinkerState, Bool))
+ cr_globals :: (MVar PersistentLinkerState, Bool)
#else
- ())
+ cr_globals :: ()
#endif
}
@@ -854,7 +853,7 @@ runCoreM :: HscEnv
-> CoreM a
-> IO (a, SimplCount)
runCoreM hsc_env rule_base us mod m = do
- glbls <- liftM2 (,) saveStaticFlagGlobals saveLinkerGlobals
+ glbls <- saveLinkerGlobals
liftM extract $ runIOEnv (reader glbls) $ unCoreM m state
where
reader glbls = CoreReader {
@@ -997,10 +996,9 @@ argument to the plugin function so that we can turn this function into
\begin{code}
reinitializeGlobals :: CoreM ()
reinitializeGlobals = do
- (sf_globals, linker_globals) <- read cr_globals
+ linker_globals <- read cr_globals
hsc_env <- getHscEnv
let dflags = hsc_dflags hsc_env
- liftIO $ restoreStaticFlagGlobals sf_globals
liftIO $ restoreLinkerGlobals linker_globals
liftIO $ setUnsafeGlobalDynFlags dflags
\end{code}
More information about the ghc-commits
mailing list