diff options
author | Douglas Wilson <douglas.wilson@gmail.com> | 2017-05-20 12:47:41 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-05-20 16:29:18 -0400 |
commit | 53c78be0aab76a3107c4dacbb1d177afacdd37fa (patch) | |
tree | 2ce5906fc856e3c49d6e4657d6c95870e6f55b83 /compiler/backpack | |
parent | 0102e2b731d33abdff4c3cde6938d1bede8f51cb (diff) | |
download | haskell-53c78be0aab76a3107c4dacbb1d177afacdd37fa.tar.gz |
Compile modules that are needed by template haskell, even with -fno-code.
This patch relates to Trac #8025
The goal here is to enable typechecking of packages that contain some
template haskell. Prior to this patch, compilation of a package with
-fno-code would fail if any functions in the package were called from
within a splice.
downsweep is changed to do an additional pass over the modules,
targetting any ModSummaries transitively depended on by a module that
has LangExt.TemplateHaskell enabled. Those targeted modules have
hscTarget changed from HscNothing to the default target of the platform.
There is a small change to the prevailing_target logic to enable this.
A simple test is added.
I have benchmarked with and without a patched haddock
(available:https://github.com/duog/haddock/tree/wip-no-explicit-th-compi
lation). Running cabal haddock on the wreq package results in a 25%
speedup on my machine:
time output from patched cabal haddock:
real 0m5.780s
user 0m5.304s
sys 0m0.496s
time output from unpatched cabal haddock:
real 0m7.712s
user 0m6.888s
sys 0m0.736s
Reviewers: austin, bgamari, ezyang
Reviewed By: bgamari
Subscribers: bgamari, DanielG, rwbarton, thomie
GHC Trac Issues: #8025
Differential Revision: https://phabricator.haskell.org/D3441
Diffstat (limited to 'compiler/backpack')
-rw-r--r-- | compiler/backpack/DriverBkp.hs | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/backpack/DriverBkp.hs b/compiler/backpack/DriverBkp.hs index 86e84d13f9..a82e66b7b0 100644 --- a/compiler/backpack/DriverBkp.hs +++ b/compiler/backpack/DriverBkp.hs @@ -155,6 +155,7 @@ withBkpSession cid insts deps session_type do_this = do -- turn on interface writing. However, if the user also -- explicitly passed in `-fno-code`, we DON'T want to write -- interfaces unless the user also asked for `-fwrite-interface`. + -- See Note [-fno-code mode] (case session_type of -- Make sure to write interfaces when we are type-checking -- indefinite packages. |