summaryrefslogtreecommitdiff
path: root/compiler/GHC/Iface/Recomp.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Iface/Recomp.hs')
-rw-r--r--compiler/GHC/Iface/Recomp.hs12
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler/GHC/Iface/Recomp.hs b/compiler/GHC/Iface/Recomp.hs
index 59c31ad566..72341ba147 100644
--- a/compiler/GHC/Iface/Recomp.hs
+++ b/compiler/GHC/Iface/Recomp.hs
@@ -452,11 +452,11 @@ checkMergedSignatures hsc_env mod_summary iface = do
checkDependencies :: HscEnv -> ModSummary -> ModIface -> IfG RecompileRequired
checkDependencies hsc_env summary iface
= do
- res <- liftIO $ fmap sequence $ traverse (\(mb_pkg, L _ mod) ->
+ res <- liftIO $ traverse (\(mb_pkg, L _ mod) ->
let reason = moduleNameString mod ++ " changed"
in classify reason <$> findImportedModule fc units home_unit dflags mod (mb_pkg))
(ms_imps summary ++ ms_srcimps summary)
- case res of
+ case sequence (res ++ [Right (fake_ghc_prim_import)| ms_ghc_prim_import summary]) of
Left recomp -> return recomp
Right es -> do
let (hs, ps) = partitionEithers es
@@ -475,9 +475,15 @@ checkDependencies hsc_env summary iface
prev_dep_pkgs = sort (dep_direct_pkgs (mi_deps iface))
bkpk_units = map (("Signature",) . indefUnit . instUnitInstanceOf . moduleUnit) (requirementMerges units (moduleName (mi_module iface)))
-
implicit_deps = map ("Implicit",) (implicitPackageDeps dflags)
+ -- GHC.Prim is very special and doesn't appear in ms_textual_imps but
+ -- ghc-prim will appear in the package dependencies still. In order to not confuse
+ -- the recompilation logic we need to not forget we imported GHC.Prim.
+ fake_ghc_prim_import = if homeUnitId home_unit == primUnitId
+ then Left (mkModuleName "GHC.Prim")
+ else Right ("GHC.Prim", primUnitId)
+
classify _ (Found _ mod)
| isHomeUnit home_unit (moduleUnit mod) = Right (Left (moduleName mod))