diff options
Diffstat (limited to 'compiler/GHC/Iface/Recomp.hs')
-rw-r--r-- | compiler/GHC/Iface/Recomp.hs | 12 |
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)) |