Fix #481: use a safe recompilation check when Template Haskell is
authorSimon Marlow <marlowsd@gmail.com>
Wed, 20 Jul 2011 08:37:54 +0000 (09:37 +0100)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 20 Jul 2011 09:48:48 +0000 (10:48 +0100)
commit48bc81ad466edfc80237015dbe5d78ba70eb5095
tree7161c08e7833cf1543b767892258a73a88603f67
parent614a17f912259c3d0450bf29a0e31494161b523b
Fix #481: use a safe recompilation check when Template Haskell is
being used.

We now track whether a module used any TH splices in the ModIface (and
at compile time in the TcGblEnv and ModGuts).  If a module used TH
splices last time it was compiled, then we ignore the results of the
normal recompilation check and recompile anyway, *unless* the module
is "stable" - that is, none of its dependencies (direct or indirect)
have changed.  The stability test is pretty important - otherwise ghc
--make would always recompile TH modules even if nothing at all had
changed, but it does require some extra plumbing to get this
information from GhcMake into HscMain.

test in driver/recomp009
13 files changed:
compiler/deSugar/Desugar.lhs
compiler/iface/BinIface.hs
compiler/iface/LoadIface.lhs
compiler/iface/MkIface.lhs
compiler/main/DriverPipeline.hs
compiler/main/GHC.hs
compiler/main/GhcMake.hs
compiler/main/HscMain.lhs
compiler/main/HscTypes.lhs
compiler/typecheck/TcRnDriver.lhs
compiler/typecheck/TcRnMonad.lhs
compiler/typecheck/TcRnTypes.lhs
compiler/typecheck/TcSplice.lhs