r177840 - Reject -no-integrated-as on windows.
Rafael Espindola
rafael.espindola at gmail.com
Sun Mar 24 08:06:53 PDT 2013
Author: rafael
Date: Sun Mar 24 10:06:53 2013
New Revision: 177840
URL: http://llvm.org/viewvc/llvm-project?rev=177840&view=rev
Log:
Reject -no-integrated-as on windows.
Modified:
cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
cfe/trunk/include/clang/Driver/ToolChain.h
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/lib/Driver/ToolChain.cpp
cfe/trunk/lib/Driver/WindowsToolChain.cpp
cfe/trunk/test/Driver/inhibit-downstream-commands.c
cfe/trunk/test/Driver/no-integrated-as-win.c
Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=177840&r1=177839&r2=177840&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Sun Mar 24 10:06:53 2013
@@ -35,6 +35,8 @@ def err_drv_use_of_Z_option : Error<
"unsupported use of internal gcc -Z option '%0'">;
def err_drv_output_argument_with_multiple_files : Error<
"cannot specify -o when generating multiple output files">;
+def err_no_external_windows_assembler : Error<
+ "there is no external assembler we can use on windows">;
def err_drv_unable_to_remove_file : Error<
"unable to remove file: %0">;
def err_drv_command_failure : Error<
Modified: cfe/trunk/include/clang/Driver/ToolChain.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=177840&r1=177839&r2=177840&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/ToolChain.h (original)
+++ cfe/trunk/include/clang/Driver/ToolChain.h Sun Mar 24 10:06:53 2013
@@ -127,7 +127,7 @@ public:
}
/// Choose a tool to use to handle the action \p JA.
- Tool &SelectTool(const JobAction &JA) const;
+ Tool *SelectTool(const JobAction &JA) const;
// Helper methods
Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=177840&r1=177839&r2=177840&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Sun Mar 24 10:06:53 2013
@@ -1288,7 +1288,7 @@ void Driver::BuildJobs(Compilation &C) c
}
}
-static const Tool &SelectToolForJob(Compilation &C, const ToolChain *TC,
+static const Tool *SelectToolForJob(Compilation &C, const ToolChain *TC,
const JobAction *JA,
const ActionList *&Inputs) {
const Tool *ToolForJob = 0;
@@ -1301,17 +1301,19 @@ static const Tool &SelectToolForJob(Comp
!C.getArgs().hasArg(options::OPT_save_temps) &&
isa<AssembleJobAction>(JA) &&
Inputs->size() == 1 && isa<CompileJobAction>(*Inputs->begin())) {
- const Tool &Compiler =
+ const Tool *Compiler =
TC->SelectTool(cast<JobAction>(**Inputs->begin()));
- if (Compiler.hasIntegratedAssembler()) {
+ if (!Compiler)
+ return NULL;
+ if (Compiler->hasIntegratedAssembler()) {
Inputs = &(*Inputs)[0]->getInputs();
- ToolForJob = &Compiler;
+ ToolForJob = Compiler;
}
}
// Otherwise use the tool for the current job.
if (!ToolForJob)
- ToolForJob = &TC->SelectTool(*JA);
+ ToolForJob = TC->SelectTool(*JA);
// See if we should use an integrated preprocessor. We do so when we have
// exactly one input, since this is the only use case we care about
@@ -1324,7 +1326,7 @@ static const Tool &SelectToolForJob(Comp
ToolForJob->hasIntegratedCPP())
Inputs = &(*Inputs)[0]->getInputs();
- return *ToolForJob;
+ return ToolForJob;
}
void Driver::BuildJobsForAction(Compilation &C,
@@ -1366,7 +1368,9 @@ void Driver::BuildJobsForAction(Compilat
const ActionList *Inputs = &A->getInputs();
const JobAction *JA = cast<JobAction>(A);
- const Tool &T = SelectToolForJob(C, TC, JA, Inputs);
+ const Tool *T = SelectToolForJob(C, TC, JA, Inputs);
+ if (!T)
+ return;
// Only use pipes when there is exactly one input.
InputInfoList InputInfos;
@@ -1401,8 +1405,8 @@ void Driver::BuildJobsForAction(Compilat
A->getType(), BaseInput);
if (CCCPrintBindings && !CCGenDiagnostics) {
- llvm::errs() << "# \"" << T.getToolChain().getTripleString() << '"'
- << " - \"" << T.getName() << "\", inputs: [";
+ llvm::errs() << "# \"" << T->getToolChain().getTripleString() << '"'
+ << " - \"" << T->getName() << "\", inputs: [";
for (unsigned i = 0, e = InputInfos.size(); i != e; ++i) {
llvm::errs() << InputInfos[i].getAsString();
if (i + 1 != e)
@@ -1410,8 +1414,8 @@ void Driver::BuildJobsForAction(Compilat
}
llvm::errs() << "], output: " << Result.getAsString() << "\n";
} else {
- T.ConstructJob(C, *JA, Result, InputInfos,
- C.getArgsForToolChain(TC, BoundArch), LinkingOutput);
+ T->ConstructJob(C, *JA, Result, InputInfos,
+ C.getArgsForToolChain(TC, BoundArch), LinkingOutput);
}
}
Modified: cfe/trunk/lib/Driver/ToolChain.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChain.cpp?rev=177840&r1=177839&r2=177840&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/ToolChain.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChain.cpp Sun Mar 24 10:06:53 2013
@@ -117,13 +117,13 @@ Tool *ToolChain::getTool(Action::ActionC
llvm_unreachable("Invalid tool kind.");
}
-Tool &ToolChain::SelectTool(const JobAction &JA) const {
+Tool *ToolChain::SelectTool(const JobAction &JA) const {
if (getDriver().ShouldUseClangCompiler(JA))
- return *getClang();
+ return getClang();
Action::ActionClass AC = JA.getKind();
if (AC == Action::AssembleJobClass && useIntegratedAs())
- return *getClangAs();
- return *getTool(AC);
+ return getClangAs();
+ return getTool(AC);
}
std::string ToolChain::GetFilePath(const char *Name) const {
Modified: cfe/trunk/lib/Driver/WindowsToolChain.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/WindowsToolChain.cpp?rev=177840&r1=177839&r2=177840&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/WindowsToolChain.cpp (original)
+++ cfe/trunk/lib/Driver/WindowsToolChain.cpp Sun Mar 24 10:06:53 2013
@@ -14,6 +14,7 @@
#include "clang/Driver/ArgList.h"
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Driver.h"
+#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Driver/Options.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Path.h"
@@ -43,10 +44,8 @@ Tool *Windows::buildLinker() const {
Tool *Windows::buildAssembler() const {
if (getTriple().getEnvironment() == llvm::Triple::MachO)
return new tools::darwin::Assemble(*this);
- else
- // There no assembler we can use on windows other than the integrated
- // assembler, so we ignore -no-integrated-as.
- return ToolChain::buildAssembler();
+ getDriver().Diag(clang::diag::err_no_external_windows_assembler);
+ return NULL;
}
bool Windows::IsIntegratedAssemblerDefault() const {
Modified: cfe/trunk/test/Driver/inhibit-downstream-commands.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/inhibit-downstream-commands.c?rev=177840&r1=177839&r2=177840&view=diff
==============================================================================
--- cfe/trunk/test/Driver/inhibit-downstream-commands.c (original)
+++ cfe/trunk/test/Driver/inhibit-downstream-commands.c Sun Mar 24 10:06:53 2013
@@ -2,4 +2,5 @@
// CHECK: error: unknown type name 'invalid'
// CHECK-NOT: clang: error: assembler command failed
// CHECK-NOT: clang: error: linker command failed
+// XFAIL: win32
invalid C code!
Modified: cfe/trunk/test/Driver/no-integrated-as-win.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/no-integrated-as-win.c?rev=177840&r1=177839&r2=177840&view=diff
==============================================================================
--- cfe/trunk/test/Driver/no-integrated-as-win.c (original)
+++ cfe/trunk/test/Driver/no-integrated-as-win.c Sun Mar 24 10:06:53 2013
@@ -1,3 +1,3 @@
// RUN: %clang -target x86_64-pc-win32 -### -no-integrated-as %s -c 2>&1 | FileCheck %s
-// CHECK: cc1as" "-triple" "x86_64-pc-win32"
+// CHECK: there is no external assembler we can use on windows
More information about the cfe-commits
mailing list