summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/main/DriverPipeline.hs16
-rw-r--r--compiler/main/SysTools.lhs13
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
)