Compile modules that are needed by template haskell, even with -fno-code.

Authored by Douglas Wilson <douglas.wilson@gmail.com> on May 20 2017, 11:47 AM.

Description

Compile modules that are needed by template haskell, even with -fno-code.

This patch relates to Trac 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: Trac #8025

Differential Revision: https://phabricator.haskell.org/D3441