diff options
-rw-r--r-- | clang/include/clang/Basic/DiagnosticDriverKinds.td | 2 | ||||
-rw-r--r-- | clang/include/clang/Driver/Job.h | 2 | ||||
-rw-r--r-- | clang/lib/Driver/Job.cpp | 8 | ||||
-rw-r--r-- | clang/test/Driver/cl-fallback.c | 6 |
4 files changed, 18 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index cc7d8969f37..214b203dfbb 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -170,4 +170,6 @@ def err_analyzer_config_multiple_values : Error< def err_drv_modules_validate_once_requires_timestamp : Error< "option '-fmodules-validate-once-per-build-session' requires " "'-fbuild-session-timestamp=<seconds since Epoch>'">; + +def note_drv_invoking_fallback : Note<"falling back to %0">; } diff --git a/clang/include/clang/Driver/Job.h b/clang/include/clang/Driver/Job.h index 1dd49a79235..d7e74a9ce83 100644 --- a/clang/include/clang/Driver/Job.h +++ b/clang/include/clang/Driver/Job.h @@ -88,6 +88,8 @@ public: /// getCreator - Return the Tool which caused the creation of this job. const Tool &getCreator() const { return Creator; } + const char *getExecutable() const { return Executable; } + const llvm::opt::ArgStringList &getArguments() const { return Arguments; } static bool classof(const Job *J) { diff --git a/clang/lib/Driver/Job.cpp b/clang/lib/Driver/Job.cpp index ee68e6f14d5..7fd43e3c56c 100644 --- a/clang/lib/Driver/Job.cpp +++ b/clang/lib/Driver/Job.cpp @@ -7,7 +7,11 @@ // //===----------------------------------------------------------------------===// +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" #include "clang/Driver/Job.h" +#include "clang/Driver/Tool.h" +#include "clang/Driver/ToolChain.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" @@ -159,6 +163,10 @@ int FallbackCommand::Execute(const StringRef **Redirects, std::string *ErrMsg, if (ExecutionFailed) *ExecutionFailed = false; + const Driver &D = getCreator().getToolChain().getDriver(); + D.Diag(diag::note_drv_invoking_fallback).setForceEmit() + << Fallback->getExecutable(); + int SecondaryStatus = Fallback->Execute(Redirects, ErrMsg, ExecutionFailed); return SecondaryStatus; } diff --git a/clang/test/Driver/cl-fallback.c b/clang/test/Driver/cl-fallback.c index 9b33b0c0a74..f58aa3262fe 100644 --- a/clang/test/Driver/cl-fallback.c +++ b/clang/test/Driver/cl-fallback.c @@ -44,3 +44,9 @@ // RUN: %clang_cl /fallback /P -### -- %s 2>&1 | FileCheck -check-prefix=P %s // P-NOT: || // P-NOT: "cl.exe" + +// RUN: not %clang_cl /fallback /c -- %s 2>&1 | \ +// RUN: FileCheck -check-prefix=ErrNote %s +// ErrNote: note: falling back to cl.exe + +#error "This fails to compile." |