Driver: Support -M and -MM.
- Not particularly elegant, but my hand is forced by gcc.
Also, tweak -ccc-print-bindings output.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68027 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp
index a5d63e6..3f1a72d 100644
--- a/lib/Driver/Driver.cpp
+++ b/lib/Driver/Driver.cpp
@@ -245,8 +245,7 @@
llvm::errs() << "clang version 1.0 (" << vers << " " << revision << ")" << "\n";
const ToolChain &TC = C.getDefaultToolChain();
- llvm::errs() << "Target: " << TC.getArchName() << '-'
- << TC.getPlatform() << '-' << TC.getOS() << '\n';
+ llvm::errs() << "Target: " << TC.getTripleString() << '\n';
}
bool Driver::HandleImmediateArgs(const Compilation &C) {
@@ -379,9 +378,6 @@
if (Archs.size() > 1) {
// No recovery needed, the point of this is just to prevent
// overwriting the same files.
- if (const Arg *A = Args.getLastArg(options::OPT_M_Group))
- Diag(clang::diag::err_drv_invalid_opt_with_multiple_archs)
- << A->getAsString(Args);
if (const Arg *A = Args.getLastArg(options::OPT_save_temps))
Diag(clang::diag::err_drv_invalid_opt_with_multiple_archs)
<< A->getAsString(Args);
@@ -618,9 +614,15 @@
switch (Phase) {
case phases::Link: assert(0 && "link action invalid here.");
case phases::Preprocess: {
- types::ID OutputTy = types::getPreprocessedType(Input->getType());
- assert(OutputTy != types::TY_INVALID &&
- "Cannot preprocess this input type!");
+ types::ID OutputTy;
+ // -{M, MM} alter the output type.
+ if (Args.hasArg(options::OPT_M) || Args.hasArg(options::OPT_MM)) {
+ OutputTy = types::TY_Dependencies;
+ } else {
+ OutputTy = types::getPreprocessedType(Input->getType());
+ assert(OutputTy != types::TY_INVALID &&
+ "Cannot preprocess this input type!");
+ }
return new PreprocessJobAction(Input, OutputTy);
}
case phases::Precompile:
@@ -848,7 +850,8 @@
}
if (CCCPrintBindings) {
- llvm::errs() << "bind - \"" << 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)