From 9c68db9dbd57cbd01008df1affe542a7ad572381 Mon Sep 17 00:00:00 2001 From: Simon Marlow <marlowsd@gmail.com> Date: Tue, 22 May 2012 11:51:46 +0100 Subject: [PATCH] Read the source file timestamp *before* preprocessing (#6106) MERGED from commit d82da293078b00d0f2d85c947e70382d398aab64 --- compiler/main/GhcMake.hs | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/compiler/main/GhcMake.hs b/compiler/main/GhcMake.hs index 11a3ba58c295..091e1be6ad07 100644 --- a/compiler/main/GhcMake.hs +++ b/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 <- -- GitLab