| split -> not_valid
| otherwise -> [ Hsc, HCc, As ]
+ HscCore | split && mangle -> [ Hsc, HCc, Mangle, SplitMangle, SplitAs ]
+ | mangle -> [ Hsc, HCc, Mangle, As ]
+ | split -> not_valid
+ | otherwise -> [ Hsc, HCc, As ]
+
HscAsm | split -> [ Hsc, SplitMangle, SplitAs ]
| otherwise -> [ Hsc, As ]
-- something has gone wrong. This test carefully avoids the
-- case where we aren't supposed to do any compilation, because the file
-- is already in linkable form (for example).
+-- hPutStrLn stderr (show ((start_phase `elem` pipeline,stop_phase /= Ln,stop_phase `notElem` pipeline), start_phase, stop_phase, pipeline,todo))
+-- hFlush stderr
when (start_phase `elem` pipeline &&
(stop_phase /= Ln && stop_phase `notElem` pipeline))
- (throwDyn (UsageError
+ (do
+ throwDyn (UsageError
("flag `" ++ stop_flag
++ "' is incompatible with source file `"
++ filename ++ "'" ++ show pipeline ++ show stop_phase)))
do_recomp <- readIORef v_Recomp
todo <- readIORef v_GhcMode
expl_o_file <- readIORef v_Output_file
- let o_file =
- case expl_o_file of
- Nothing -> unJust "source_unchanged" (ml_obj_file location)
- Just x -> x
+
+ let o_file -- if the -o option is given and IT IS THE OBJECT FILE FOR
+ -- THIS COMPILATION, then use that to determine if the
+ -- source is unchanged.
+ | Just x <- expl_o_file, todo == StopBefore Ln = x
+ | otherwise = unJust "source_unchanged" (ml_obj_file location)
+
source_unchanged <-
if not (do_recomp && ( todo == DoLink || todo == StopBefore Ln ))
then return False