diff options
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticDriverKinds.td | 5 | ||||
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticGroups.td | 1 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 10 | ||||
| -rw-r--r-- | clang/test/Driver/cl-fallback.c | 10 |
4 files changed, 24 insertions, 2 deletions
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index f65fecdcf69..1da7a1605bf 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -175,5 +175,8 @@ def err_drv_modules_validate_once_requires_timestamp : Error< "'-fbuild-session-timestamp=<seconds since Epoch>'">; def warn_drv_invoking_fallback : Warning<"falling back to %0">, - InGroup<DiagGroup<"fallback">>; + InGroup<Fallback>; +def warn_drv_rtti_fallback : + Warning<"cannot compile RTTI yet, falling back to %0">, + InGroup<Fallback>; } diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index b1243cfabd8..485b48d3809 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -425,6 +425,7 @@ def Visibility : DiagGroup<"visibility">; def ZeroLengthArray : DiagGroup<"zero-length-array">; def GNUZeroLineDirective : DiagGroup<"gnu-zero-line-directive">; def GNUZeroVariadicMacroArguments : DiagGroup<"gnu-zero-variadic-macro-arguments">; +def Fallback : DiagGroup<"fallback">; // This covers both the deprecated case (in C++98) // and the extension case (in C++11 onwards). diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 1f9e12bb538..afef7008fad 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -4106,7 +4106,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, tools::visualstudio::Compile CL(getToolChain()); Command *CLCommand = CL.GetCommand(C, JA, Output, Inputs, Args, LinkingOutput); - C.addCommand(new FallbackCommand(JA, *this, Exec, CmdArgs, CLCommand)); + // RTTI support in clang-cl is a work in progress. Fall back to MSVC early + // if we are using 'clang-cl /fallback /GR'. + // FIXME: Remove this when RTTI is finished. + if (Args.hasFlag(options::OPT_frtti, options::OPT_fno_rtti, false)) { + D.Diag(diag::warn_drv_rtti_fallback) << CLCommand->getExecutable(); + C.addCommand(CLCommand); + } else { + C.addCommand(new FallbackCommand(JA, *this, Exec, CmdArgs, CLCommand)); + } } else { C.addCommand(new Command(JA, *this, Exec, CmdArgs)); } diff --git a/clang/test/Driver/cl-fallback.c b/clang/test/Driver/cl-fallback.c index 655535b65fb..1bb0993d27d 100644 --- a/clang/test/Driver/cl-fallback.c +++ b/clang/test/Driver/cl-fallback.c @@ -54,6 +54,16 @@ // RUN: FileCheck -check-prefix=ErrWarn %s // ErrWarn: warning: falling back to {{.*}}cl.exe +// Don't attempt to run clang -cc1 with /fallback and /GR. It isn't ready yet. +// RUN: %clang_cl /fallback /c /GR -### -- %s 2>&1 | \ +// RUN: FileCheck -check-prefix=RTTI %s +// RTTI: warning: cannot compile RTTI yet, falling back to {{.*}}cl.exe +// RUN: %clang_cl /fallback /c /GR /GR- -### -- %s 2>&1 | \ +// RUN: FileCheck -check-prefix=NO_RTTI %s +// NO_RTTI: "-cc1" +// NO_RTTI: || +// NO_RTTI: cl.exe + // Don't fall back on non-C or C++ files. // RUN: %clang_cl /fallback -### -- %S/Inputs/file.ll 2>&1 | FileCheck -check-prefix=LL %s // LL: file.ll |

