summaryrefslogtreecommitdiff
path: root/compiler/GHC/Driver
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Driver')
-rw-r--r--compiler/GHC/Driver/Backpack.hs7
-rw-r--r--compiler/GHC/Driver/Make.hs4
-rw-r--r--compiler/GHC/Driver/Pipeline/Execute.hs7
3 files changed, 12 insertions, 6 deletions
diff --git a/compiler/GHC/Driver/Backpack.hs b/compiler/GHC/Driver/Backpack.hs
index 2190bdd753..8581865dbf 100644
--- a/compiler/GHC/Driver/Backpack.hs
+++ b/compiler/GHC/Driver/Backpack.hs
@@ -769,6 +769,7 @@ summariseRequirement pn mod_name = do
ms_hie_date = hie_timestamp,
ms_srcimps = [],
ms_textual_imps = extra_sig_imports,
+ ms_ghc_prim_import = False,
ms_parsed_mod = Just (HsParsedModule {
hpm_module = L loc (HsModule {
hsmodAnn = noAnn,
@@ -854,8 +855,9 @@ hsModuleToModSummary pn hsc_src modname
let (src_idecls, ord_idecls) = partition ((== IsBoot) . ideclSource . unLoc) imps
-- GHC.Prim doesn't exist physically, so don't go looking for it.
- ordinary_imps = filter ((/= moduleName gHC_PRIM) . unLoc . ideclName . unLoc)
- ord_idecls
+ (ordinary_imps, ghc_prim_import)
+ = partition ((/= moduleName gHC_PRIM) . unLoc . ideclName . unLoc)
+ ord_idecls
implicit_prelude = xopt LangExt.ImplicitPrelude dflags
implicit_imports = mkPrelImports modname loc
@@ -884,6 +886,7 @@ hsModuleToModSummary pn hsc_src modname
ms_hspp_opts = dflags,
ms_hspp_buf = Nothing,
ms_srcimps = map convImport src_idecls,
+ ms_ghc_prim_import = not (null ghc_prim_import),
ms_textual_imps = normal_imports
-- We have to do something special here:
-- due to merging, requirements may end up with
diff --git a/compiler/GHC/Driver/Make.hs b/compiler/GHC/Driver/Make.hs
index aef6953a30..51fb469828 100644
--- a/compiler/GHC/Driver/Make.hs
+++ b/compiler/GHC/Driver/Make.hs
@@ -2538,6 +2538,7 @@ makeNewModSummary hsc_env MakeNewModSummary{..} = do
, ms_hspp_buf = Just pi_hspp_buf
, ms_parsed_mod = Nothing
, ms_srcimps = pi_srcimps
+ , ms_ghc_prim_import = pi_ghc_prim_import
, ms_textual_imps =
pi_theimps ++
extra_sig_imports ++
@@ -2556,6 +2557,7 @@ data PreprocessedImports
{ pi_local_dflags :: DynFlags
, pi_srcimps :: [(Maybe FastString, Located ModuleName)]
, pi_theimps :: [(Maybe FastString, Located ModuleName)]
+ , pi_ghc_prim_import :: Bool
, pi_hspp_fn :: FilePath
, pi_hspp_buf :: StringBuffer
, pi_mod_name_loc :: SrcSpan
@@ -2575,7 +2577,7 @@ getPreprocessedImports hsc_env src_fn mb_phase maybe_buf = do
(pi_local_dflags, pi_hspp_fn)
<- ExceptT $ preprocess hsc_env src_fn (fst <$> maybe_buf) mb_phase
pi_hspp_buf <- liftIO $ hGetStringBuffer pi_hspp_fn
- (pi_srcimps, pi_theimps, L pi_mod_name_loc pi_mod_name)
+ (pi_srcimps, pi_theimps, pi_ghc_prim_import, L pi_mod_name_loc pi_mod_name)
<- ExceptT $ do
let imp_prelude = xopt LangExt.ImplicitPrelude pi_local_dflags
popts = initParserOpts pi_local_dflags
diff --git a/compiler/GHC/Driver/Pipeline/Execute.hs b/compiler/GHC/Driver/Pipeline/Execute.hs
index 57d491104e..022e8ce1a1 100644
--- a/compiler/GHC/Driver/Pipeline/Execute.hs
+++ b/compiler/GHC/Driver/Pipeline/Execute.hs
@@ -632,15 +632,15 @@ runHscPhase pipe_env hsc_env0 input_fn src_flavour = do
-- gather the imports and module name
- (hspp_buf,mod_name,imps,src_imps) <- do
+ (hspp_buf,mod_name,imps,src_imps, ghc_prim_imp) <- do
buf <- hGetStringBuffer input_fn
let imp_prelude = xopt LangExt.ImplicitPrelude dflags
popts = initParserOpts dflags
eimps <- getImports popts imp_prelude buf input_fn (basename <.> suff)
case eimps of
Left errs -> throwErrors (GhcPsMessage <$> errs)
- Right (src_imps,imps,L _ mod_name) -> return
- (Just buf, mod_name, imps, src_imps)
+ Right (src_imps,imps, ghc_prim_imp, L _ mod_name) -> return
+ (Just buf, mod_name, imps, src_imps, ghc_prim_imp)
-- Take -o into account if present
-- Very like -ohi, but we must *only* do this if we aren't linking
@@ -679,6 +679,7 @@ runHscPhase pipe_env hsc_env0 input_fn src_flavour = do
ms_parsed_mod = Nothing,
ms_iface_date = hi_date,
ms_hie_date = hie_date,
+ ms_ghc_prim_import = ghc_prim_imp,
ms_textual_imps = imps,
ms_srcimps = src_imps }