diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-05-21 20:11:54 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-05-21 20:11:54 +0000 |
commit | d6277fb9e0353edffc0d6c8655a65542c08cf6f1 (patch) | |
tree | e9148a353f1ad11aaf9b1692b1e073d6e130907d /lib/Driver | |
parent | b7824d9919c3588e898c22f47a5248f10a7a084d (diff) |
[driver] When creating the compiler invocation out of command-line
arguments, force use of clang frontend for the driver.
Fixes rdar://11356765.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157205 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver')
-rw-r--r-- | lib/Driver/Driver.cpp | 2 | ||||
-rw-r--r-- | lib/Driver/ToolChains.cpp | 18 |
2 files changed, 12 insertions, 8 deletions
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 9340ba10e5..9e3ba84d5b 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -59,7 +59,7 @@ Driver::Driver(StringRef ClangExecutable, CCPrintOptions(false), CCPrintHeaders(false), CCLogDiagnostics(false), CCGenDiagnostics(false), CCCGenericGCCName(""), CheckInputsExist(true), CCCUseClang(true), CCCUseClangCXX(true), CCCUseClangCPP(true), - CCCUsePCH(true), SuppressMissingInputWarning(false) { + ForcedClangUse(false), CCCUsePCH(true), SuppressMissingInputWarning(false) { if (IsProduction) { // In a "production" build, only use clang on architectures we expect to // work. diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index b0e94bff6c..53b78d238b 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -199,21 +199,25 @@ void Generic_ELF::anchor() {} Tool &Darwin::SelectTool(const Compilation &C, const JobAction &JA, const ActionList &Inputs) const { - Action::ActionClass Key; + Action::ActionClass Key = JA.getKind(); + bool useClang = false; if (getDriver().ShouldUseClangCompiler(C, JA, getTriple())) { + useClang = true; // Fallback to llvm-gcc for i386 kext compiles, we don't support that ABI. - if (Inputs.size() == 1 && + if (!getDriver().shouldForceClangUse() && + Inputs.size() == 1 && types::isCXX(Inputs[0]->getType()) && getTriple().isOSDarwin() && getTriple().getArch() == llvm::Triple::x86 && (C.getArgs().getLastArg(options::OPT_fapple_kext) || C.getArgs().getLastArg(options::OPT_mkernel))) - Key = JA.getKind(); - else - Key = Action::AnalyzeJobClass; - } else - Key = JA.getKind(); + useClang = false; + } + + // FIXME: This seems like a hacky way to choose clang frontend. + if (useClang) + Key = Action::AnalyzeJobClass; bool UseIntegratedAs = C.getArgs().hasFlag(options::OPT_integrated_as, options::OPT_no_integrated_as, |