Disable -dynamic-too on Windows
authorAustin Seipp <austin@well-typed.com>
Mon, 13 Jan 2014 08:15:35 +0000 (02:15 -0600)
committerAustin Seipp <austin@well-typed.com>
Tue, 14 Jan 2014 09:46:06 +0000 (03:46 -0600)
Signed-off-by: Austin Seipp <austin@well-typed.com>
compiler/main/DriverPipeline.hs
compiler/main/DynFlags.hs
mk/config.mk.in

index 3cc176c..acd231e 100644 (file)
@@ -596,14 +596,16 @@ runPipeline stop_phase hsc_env0 (input_fn, mb_phase)
          -- -dynamic-too, but couldn't do the -dynamic-too fast
          -- path, then rerun the pipeline for the dyn way
          let dflags = extractDynFlags hsc_env
-         when isHaskellishFile $ whenCannotGenerateDynamicToo dflags $ do
-             debugTraceMsg dflags 4
-                 (text "Running the pipeline again for -dynamic-too")
-             let dflags' = dynamicTooMkDynamicDynFlags dflags
-             hsc_env' <- newHscEnv dflags'
-             _ <- runPipeline' start_phase hsc_env' env input_fn
-                               maybe_loc maybe_stub_o
-             return ()
+         -- NB: Currently disabled on Windows (ref #7134, #8228, and #5987)
+         when (not $ platformOS (targetPlatform dflags) == OSMinGW32) $ do
+           when isHaskellishFile $ whenCannotGenerateDynamicToo dflags $ do
+               debugTraceMsg dflags 4
+                   (text "Running the pipeline again for -dynamic-too")
+               let dflags' = dynamicTooMkDynamicDynFlags dflags
+               hsc_env' <- newHscEnv dflags'
+               _ <- runPipeline' start_phase hsc_env' env input_fn
+                                 maybe_loc maybe_stub_o
+               return ()
          return r
 
 runPipeline'
index 734e7e9..1c0a923 100644 (file)
@@ -3614,6 +3614,11 @@ tARGET_MAX_WORD dflags
 -- Be careful not to introduce potential loops!
 makeDynFlagsConsistent :: DynFlags -> (DynFlags, [Located String])
 makeDynFlagsConsistent dflags
+ -- Disable -dynamic-too on Windows (#8228, #7134, #5987)
+ | os == OSMinGW32 && gopt Opt_BuildDynamicToo dflags
+    = let dflags' = gopt_unset dflags Opt_BuildDynamicToo
+          warn    = "-dynamic-too is not supported on Windows"
+      in loop dflags' warn
  | hscTarget dflags == HscC &&
    not (platformUnregisterised (targetPlatform dflags))
     = if cGhcWithNativeCodeGen == "YES"
index 59d48c4..350ea69 100644 (file)
@@ -137,6 +137,7 @@ DYNAMIC_TOO = YES
 ifeq "$(TargetOS_CPP)" "mingw32"
 # This doesn't work on Windows yet
 DYNAMIC_GHC_PROGRAMS = NO
+DYNAMIC_TOO=NO
 else ifeq "$(TargetOS_CPP)" "freebsd"
 # FreeBSD cannot do proper resolution for $ORIGIN (due to a bug in
 # rtld(1)), so disable it by default (see #7819).