diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs index 03bb5292dab5f42fedd121c26b56c6a9b5ebebb7..28c57e3ba82328effb75bdeb320b581c58be6f91 100644 --- a/compiler/main/DynFlags.hs +++ b/compiler/main/DynFlags.hs @@ -601,6 +601,7 @@ data GeneralFlag -- misc opts | Opt_Pp | Opt_ForceRecomp + | Opt_SkipRecompUnstableTH | Opt_IgnoreOptimChanges | Opt_IgnoreHpcChanges | Opt_ExcessPrecision @@ -4228,6 +4229,7 @@ fFlagsDeps = [ flagSpec "flat-cache" Opt_FlatCache, flagSpec "float-in" Opt_FloatIn, flagSpec "force-recomp" Opt_ForceRecomp, + flagSpec "skip-recomp-unstable-th" Opt_SkipRecompUnstableTH, flagSpec "ignore-optim-changes" Opt_IgnoreOptimChanges, flagSpec "ignore-hpc-changes" Opt_IgnoreHpcChanges, flagSpec "full-laziness" Opt_FullLaziness, diff --git a/compiler/main/HscMain.hs b/compiler/main/HscMain.hs index 9bb6b4e3911803161bbda9da2c0022f6d57f323d..a2dfc58069ae4d0125a833c9d65d871143fcc7bf 100644 --- a/compiler/main/HscMain.hs +++ b/compiler/main/HscMain.hs @@ -661,6 +661,8 @@ hscIncrementalFrontend SourceUnmodifiedAndStable -> True _ -> False + skipRecompUnstableTH = gopt Opt_SkipRecompUnstableTH (hsc_dflags hsc_env) + case m_tc_result of Just tc_result | not always_do_basic_recompilation_check -> @@ -692,7 +694,7 @@ hscIncrementalFrontend -- one-shot mode. case m_tc_result of Nothing - | mi_used_th iface && not stable -> + | mi_used_th iface && not stable && not skipRecompUnstableTH -> compile mb_old_hash (RecompBecause "TH") _ -> skip iface