summaryrefslogtreecommitdiff
path: root/compiler/GHC/Driver/Backpack.hs
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2020-09-07 19:48:03 +0200
committerMarge Bot <ben+marge-bot@smart-cactus.org>2020-11-06 03:46:08 -0500
commitc85f4928d4dbb2eb2cf906d08bfe7620d6f04ca5 (patch)
treea61f2361be48b9878df3f1033cec2b2cb8f01c40 /compiler/GHC/Driver/Backpack.hs
parente07e383a3250cb27a9128ad8d5c68def5c3df336 (diff)
downloadhaskell-c85f4928d4dbb2eb2cf906d08bfe7620d6f04ca5.tar.gz
Refactor -dynamic-too handling
1) Don't modify DynFlags (too much) for -dynamic-too: now when we generate dynamic outputs for "-dynamic-too", we only set "dynamicNow" boolean field in DynFlags instead of modifying several other fields. These fields now have accessors that take dynamicNow into account. 2) Use DynamicTooState ADT to represent -dynamic-too state. It's much clearer than the undocumented "DynamicTooConditional" that was used before. As a result, we can finally remove the hscs_iface_dflags field in HscRecomp. There was a comment on this field saying: "FIXME (osa): I don't understand why this is necessary, but I spent almost two days trying to figure this out and I couldn't .. perhaps someone who understands this code better will remove this later." I don't fully understand the details, but it was needed because of the changes made to the DynFlags for -dynamic-too. There is still something very dubious in GHC.Iface.Recomp: we have to disable the "dynamicNow" flag at some point for some Backpack's "heinous hack" to continue to work. It may be because interfaces for indefinite units are always non-dynamic, or because we mix and match dynamic and non-dynamic interfaces (#9176), or something else, who knows?
Diffstat (limited to 'compiler/GHC/Driver/Backpack.hs')
-rw-r--r--compiler/GHC/Driver/Backpack.hs7
1 files changed, 5 insertions, 2 deletions
diff --git a/compiler/GHC/Driver/Backpack.hs b/compiler/GHC/Driver/Backpack.hs
index d35e32cc27..d38ba98622 100644
--- a/compiler/GHC/Driver/Backpack.hs
+++ b/compiler/GHC/Driver/Backpack.hs
@@ -204,8 +204,11 @@ withBkpSession cid insts deps session_type do_this = do
hiDir = Just (outdir hiDir),
stubDir = Just (outdir stubDir),
-- Unset output-file for non exe builds
- outputFile = if session_type == ExeSession
- then outputFile dflags
+ outputFile_ = if session_type == ExeSession
+ then outputFile_ dflags
+ else Nothing,
+ dynOutputFile_ = if session_type == ExeSession
+ then dynOutputFile_ dflags
else Nothing,
-- Clear the import path so we don't accidentally grab anything
importPaths = [],