[commit: ghc] ghc-7.4: Be less conservative about recompiling after changes to -main-is (#5878) (09a4cfc)
Paolo Capriotti
p.capriotti at gmail.com
Tue Mar 6 18:53:18 CET 2012
Repository : ssh://darcs.haskell.org//srv/darcs/ghc
On branch : ghc-7.4
http://hackage.haskell.org/trac/ghc/changeset/09a4cfcd3ba808dae6777ec6554a92658548ee0b
>---------------------------------------------------------------
commit 09a4cfcd3ba808dae6777ec6554a92658548ee0b
Author: Simon Marlow <marlowsd at gmail.com>
Date: Thu Feb 16 09:34:43 2012 +0000
Be less conservative about recompiling after changes to -main-is (#5878)
MERGED from commits eda2c7316883e7d107755c08ad696e669ead0447 and
444e2fedb951a94a289d909b843f3281b9d2dc0a
>---------------------------------------------------------------
compiler/iface/FlagChecker.hs | 8 +++++---
compiler/iface/MkIface.lhs | 6 ++++--
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/compiler/iface/FlagChecker.hs b/compiler/iface/FlagChecker.hs
index 5e4a709..9398b6c 100644
--- a/compiler/iface/FlagChecker.hs
+++ b/compiler/iface/FlagChecker.hs
@@ -10,6 +10,7 @@ import Binary
import BinIface ()
import DynFlags
import HscTypes
+import Module
import Name
import Fingerprint
-- import Outputable
@@ -21,11 +22,12 @@ import System.FilePath (normalise)
-- | Produce a fingerprint of a @DynFlags@ value. We only base
-- the finger print on important fields in @DynFlags@ so that
-- the recompilation checker can use this fingerprint.
-fingerprintDynFlags :: DynFlags -> (BinHandle -> Name -> IO ())
+fingerprintDynFlags :: DynFlags -> Module -> (BinHandle -> Name -> IO ())
-> IO Fingerprint
-fingerprintDynFlags DynFlags{..} nameio =
- let mainis = (mainModIs, mainFunIs)
+fingerprintDynFlags DynFlags{..} this_mod nameio =
+ let mainis = if mainModIs == this_mod then Just mainFunIs else Nothing
+ -- see #5878
-- pkgopts = (thisPackage dflags, sort $ packageFlags dflags)
safeHs = setSafeMode safeHaskell
-- oflags = sort $ filter filterOFlags $ flags dflags
diff --git a/compiler/iface/MkIface.lhs b/compiler/iface/MkIface.lhs
index 8b5b665..0c76d6e 100644
--- a/compiler/iface/MkIface.lhs
+++ b/compiler/iface/MkIface.lhs
@@ -583,7 +583,7 @@ addFingerprints hsc_env mb_old_fingerprint iface0 new_decls
-- - (some of) dflags
-- it returns two hashes, one that shouldn't change
-- the abi hash and one that should
- flag_hash <- fingerprintDynFlags dflags putNameLiterally
+ flag_hash <- fingerprintDynFlags dflags this_mod putNameLiterally
-- the ABI hash depends on:
-- - decls
@@ -1208,7 +1208,9 @@ checkVersions hsc_env mod_summary iface
checkFlagHash :: HscEnv -> ModIface -> IfG RecompileRequired
checkFlagHash hsc_env iface = do
let old_hash = mi_flag_hash iface
- new_hash <- liftIO $ fingerprintDynFlags (hsc_dflags hsc_env) putNameLiterally
+ new_hash <- liftIO $ fingerprintDynFlags (hsc_dflags hsc_env)
+ (mi_module iface)
+ putNameLiterally
case old_hash == new_hash of
True -> up_to_date (ptext $ sLit "Module flags unchanged")
False -> out_of_date_hash (ptext $ sLit " Module flags have changed")
More information about the Cvs-ghc
mailing list