Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/d82da293078b00d0f2d85c947e70382d398aab64

>---------------------------------------------------------------

commit d82da293078b00d0f2d85c947e70382d398aab64
Author: Simon Marlow <marlo...@gmail.com>
Date:   Tue May 22 11:51:46 2012 +0100

    Read the source file timestamp *before* preprocessing (#6106)

>---------------------------------------------------------------

 compiler/main/GhcMake.hs |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/compiler/main/GhcMake.hs b/compiler/main/GhcMake.hs
index f0662ab..910e1f6 100644
--- a/compiler/main/GhcMake.hs
+++ b/compiler/main/GhcMake.hs
@@ -1190,15 +1190,13 @@ summariseFile hsc_env old_summaries file mb_phase 
obj_allowed maybe_buf
    = do
         let location = ms_location old_summary
 
-                -- return the cached summary if the source didn't change
-        src_timestamp <- case maybe_buf of
-                           Just (_,t) -> return t
-                           Nothing    -> liftIO $ getModificationUTCTime file
+        src_timestamp <- get_src_timestamp
                 -- The file exists; we checked in getRootSummary above.
                 -- If it gets removed subsequently, then this 
                 -- getModificationUTCTime may fail, but that's the right
                 -- behaviour.
 
+                -- return the cached summary if the source didn't change
         if ms_hs_date old_summary == src_timestamp 
            then do -- update the object-file timestamp
                   obj_timestamp <-
@@ -1208,12 +1206,18 @@ summariseFile hsc_env old_summaries file mb_phase 
obj_allowed maybe_buf
                         else return Nothing
                   return old_summary{ ms_obj_date = obj_timestamp }
            else
-                new_summary
+                new_summary src_timestamp
 
    | otherwise
-   = new_summary
+   = do src_timestamp <- get_src_timestamp
+        new_summary src_timestamp
   where
-    new_summary = do
+    get_src_timestamp = case maybe_buf of
+                           Just (_,t) -> return t
+                           Nothing    -> liftIO $ getModificationUTCTime file
+                        -- getMofificationUTCTime may fail
+
+    new_summary src_timestamp = do
         let dflags = hsc_dflags hsc_env
 
         (dflags', hspp_fn, buf)
@@ -1228,11 +1232,6 @@ summariseFile hsc_env old_summaries file mb_phase 
obj_allowed maybe_buf
         -- to findModule will find it, even if it's not on any search path
         mod <- liftIO $ addHomeModuleToFinder hsc_env mod_name location
 
-        src_timestamp <- case maybe_buf of
-                           Just (_,t) -> return t
-                           Nothing    -> liftIO $ getModificationUTCTime file
-                        -- getMofificationTime may fail
-
         -- when the user asks to load a source file by name, we only
         -- use an object file if -fobject-code is on.  See #1205.
         obj_timestamp <-



_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to