diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/main/DriverPipeline.hs | 16 | ||||
-rw-r--r-- | compiler/main/SysTools.lhs | 13 |
2 files changed, 18 insertions, 11 deletions
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs index f14bfbe8d3..4daaca34ea 100644 --- a/compiler/main/DriverPipeline.hs +++ b/compiler/main/DriverPipeline.hs @@ -1232,18 +1232,18 @@ runPhase As input_fn dflags let whichAsProg | hscTarget dflags == HscLlvm && platformOS (targetPlatform dflags) == OSDarwin = do + -- be careful what options we call clang with + -- see #5903 and #7617 for bugs caused by this. llvmVer <- liftIO $ figureLlvmVersion dflags return $ case llvmVer of - Just n | n >= 30 -> - (SysTools.runClang, getOpts dflags opt_c) + Just n | n >= 30 -> SysTools.runClang + _ -> SysTools.runAs - _ -> (SysTools.runAs, getOpts dflags opt_a) + | otherwise = return SysTools.runAs - | otherwise - = return (SysTools.runAs, getOpts dflags opt_a) - - (as_prog, as_opts) <- whichAsProg - let cmdline_include_paths = includePaths dflags + as_prog <- whichAsProg + let as_opts = getOpts dflags opt_a + cmdline_include_paths = includePaths dflags next_phase <- maybeMergeStub output_fn <- phaseOutputFilename next_phase diff --git a/compiler/main/SysTools.lhs b/compiler/main/SysTools.lhs index f4e5f2cf0f..28ff49969d 100644 --- a/compiler/main/SysTools.lhs +++ b/compiler/main/SysTools.lhs @@ -527,12 +527,19 @@ runClang :: DynFlags -> [Option] -> IO () runClang dflags args = do -- we simply assume its available on the PATH let clang = "clang" + -- be careful what options we call clang with + -- see #5903 and #7617 for bugs caused by this. + (_,args0) = pgm_a dflags + args1 = args0 ++ args + mb_env <- getGccEnv args1 Exception.catch (do - runSomething dflags "Clang (Assembler)" clang args + runSomethingFiltered dflags id "Clang (Assembler)" clang args1 mb_env ) (\(err :: SomeException) -> do - errorMsg dflags $ text $ "Error running clang! you need clang installed" - ++ " to use the LLVM backend" + errorMsg dflags $ + text ("Error running clang! you need clang installed to use the" ++ + "LLVM backend") $+$ + text "(or GHC tried to execute clang incorrectly)" throw err ) |