Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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

MERGED from commit d82da29
  • Loading branch information...
commit 9c68db9dbd57cbd01008df1affe542a7ad572381 1 parent cd00c77
@simonmar simonmar authored pcapriotti committed
Showing with 11 additions and 13 deletions.
  1. +11 −13 compiler/main/GhcMake.hs
View
24 compiler/main/GhcMake.hs
@@ -1213,16 +1213,14 @@ 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 $ getModificationTime file
+ src_timestamp <- get_src_timestamp
-- The file exists; we checked in getRootSummary above.
-- If it gets removed subsequently, then this
-- getModificationTime may fail, but that's the right
-- behaviour.
- if ms_hs_date old_summary == src_timestamp
+ -- 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 <-
if isObjectTarget (hscTarget (hsc_dflags hsc_env))
@@ -1231,12 +1229,17 @@ 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 $ getModificationTime file
+
+ new_summary src_timestamp = do
let dflags = hsc_dflags hsc_env
(dflags', hspp_fn, buf)
@@ -1251,11 +1254,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 $ getModificationTime 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 <-
Please sign in to comment.
Something went wrong with that request. Please try again.