Author: hans Date: Mon Sep 23 19:08:55 2013 New Revision: 191250 URL: http://llvm.org/viewvc/llvm-project?rev=191250&view=rev Log: clang-cl: print diagnostics as "error(clang): foo" in /fallback mode
This solves two problems: 1) MSBuild will not flag the build as unsuccessful just because we print an error in the output, since "error(clang):" doesn't seem to match the regex it's using. 2) It becomes more clear that the diagnostic is coming from clang as supposed to cl.exe. Differential Revision: http://llvm-reviews.chandlerc.com/D1735 Modified: cfe/trunk/include/clang/Basic/DiagnosticOptions.def cfe/trunk/include/clang/Frontend/TextDiagnostic.h cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/lib/Frontend/TextDiagnostic.cpp cfe/trunk/lib/Frontend/TextDiagnosticPrinter.cpp cfe/trunk/test/Driver/cl-fallback.c cfe/trunk/test/Misc/diag-format.c Modified: cfe/trunk/include/clang/Basic/DiagnosticOptions.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticOptions.def?rev=191250&r1=191249&r2=191250&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticOptions.def (original) +++ cfe/trunk/include/clang/Basic/DiagnosticOptions.def Mon Sep 23 19:08:55 2013 @@ -72,6 +72,7 @@ DIAGOPT(VerifyDiagnostics, 1, 0) /// Che DIAGOPT(ElideType, 1, 0) /// Elide identical types in template diffing DIAGOPT(ShowTemplateTree, 1, 0) /// Print a template tree when diffing +DIAGOPT(CLFallbackMode, 1, 0) /// Format for clang-cl fallback mode VALUE_DIAGOPT(ErrorLimit, 32, 0) /// Limit # errors emitted. /// Limit depth of macro expansion backtrace. Modified: cfe/trunk/include/clang/Frontend/TextDiagnostic.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/TextDiagnostic.h?rev=191250&r1=191249&r2=191250&view=diff ============================================================================== --- cfe/trunk/include/clang/Frontend/TextDiagnostic.h (original) +++ cfe/trunk/include/clang/Frontend/TextDiagnostic.h Mon Sep 23 19:08:55 2013 @@ -51,7 +51,8 @@ public: /// TextDiagnostic logic requires. static void printDiagnosticLevel(raw_ostream &OS, DiagnosticsEngine::Level Level, - bool ShowColors); + bool ShowColors, + bool CLFallbackMode = false); /// \brief Pretty-print a diagnostic message to a raw_ostream. /// Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=191250&r1=191249&r2=191250&view=diff ============================================================================== --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Mon Sep 23 19:08:55 2013 @@ -3783,7 +3783,10 @@ void Clang::AddClangCLArgs(const ArgList if (!Args.hasArg(options::OPT_fdiagnostics_format_EQ)) { CmdArgs.push_back("-fdiagnostics-format"); - CmdArgs.push_back("msvc"); + if (Args.hasArg(options::OPT__SLASH_fallback)) + CmdArgs.push_back("msvc-fallback"); + else + CmdArgs.push_back("msvc"); } } Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=191250&r1=191249&r2=191250&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Sep 23 19:08:55 2013 @@ -589,7 +589,10 @@ bool clang::ParseDiagnosticArgs(Diagnost Opts.setFormat(DiagnosticOptions::Clang); else if (Format == "msvc") Opts.setFormat(DiagnosticOptions::Msvc); - else if (Format == "vi") + else if (Format == "msvc-fallback") { + Opts.setFormat(DiagnosticOptions::Msvc); + Opts.CLFallbackMode = true; + } else if (Format == "vi") Opts.setFormat(DiagnosticOptions::Vi); else { Success = false; Modified: cfe/trunk/lib/Frontend/TextDiagnostic.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/TextDiagnostic.cpp?rev=191250&r1=191249&r2=191250&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/TextDiagnostic.cpp (original) +++ cfe/trunk/lib/Frontend/TextDiagnostic.cpp Mon Sep 23 19:08:55 2013 @@ -693,7 +693,8 @@ TextDiagnostic::emitDiagnosticMessage(So if (DiagOpts->ShowColors) OS.resetColor(); - printDiagnosticLevel(OS, Level, DiagOpts->ShowColors); + printDiagnosticLevel(OS, Level, DiagOpts->ShowColors, + DiagOpts->CLFallbackMode); printDiagnosticMessage(OS, Level, Message, OS.tell() - StartOfLocationInfo, DiagOpts->MessageLength, DiagOpts->ShowColors); @@ -702,7 +703,8 @@ TextDiagnostic::emitDiagnosticMessage(So /*static*/ void TextDiagnostic::printDiagnosticLevel(raw_ostream &OS, DiagnosticsEngine::Level Level, - bool ShowColors) { + bool ShowColors, + bool CLFallbackMode) { if (ShowColors) { // Print diagnostic category in bold and color switch (Level) { @@ -718,12 +720,21 @@ TextDiagnostic::printDiagnosticLevel(raw switch (Level) { case DiagnosticsEngine::Ignored: llvm_unreachable("Invalid diagnostic type"); - case DiagnosticsEngine::Note: OS << "note: "; break; - case DiagnosticsEngine::Warning: OS << "warning: "; break; - case DiagnosticsEngine::Error: OS << "error: "; break; - case DiagnosticsEngine::Fatal: OS << "fatal error: "; break; + case DiagnosticsEngine::Note: OS << "note"; break; + case DiagnosticsEngine::Warning: OS << "warning"; break; + case DiagnosticsEngine::Error: OS << "error"; break; + case DiagnosticsEngine::Fatal: OS << "fatal error"; break; } + // In clang-cl /fallback mode, print diagnostics as "error(clang):". This + // makes it more clear whether a message is coming from clang or cl.exe, + // and it prevents MSBuild from concluding that the build failed just because + // there is an "error:" in the output. + if (CLFallbackMode) + OS << "(clang)"; + + OS << ": "; + if (ShowColors) OS.resetColor(); } Modified: cfe/trunk/lib/Frontend/TextDiagnosticPrinter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/TextDiagnosticPrinter.cpp?rev=191250&r1=191249&r2=191250&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/TextDiagnosticPrinter.cpp (original) +++ cfe/trunk/lib/Frontend/TextDiagnosticPrinter.cpp Mon Sep 23 19:08:55 2013 @@ -132,7 +132,8 @@ void TextDiagnosticPrinter::HandleDiagno // diagnostics in a context that lacks language options, a source manager, or // other infrastructure necessary when emitting more rich diagnostics. if (!Info.getLocation().isValid()) { - TextDiagnostic::printDiagnosticLevel(OS, Level, DiagOpts->ShowColors); + TextDiagnostic::printDiagnosticLevel(OS, Level, DiagOpts->ShowColors, + DiagOpts->CLFallbackMode); TextDiagnostic::printDiagnosticMessage(OS, Level, DiagMessageStream.str(), OS.tell() - StartOfLocationInfo, DiagOpts->MessageLength, Modified: cfe/trunk/test/Driver/cl-fallback.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-fallback.c?rev=191250&r1=191249&r2=191250&view=diff ============================================================================== --- cfe/trunk/test/Driver/cl-fallback.c (original) +++ cfe/trunk/test/Driver/cl-fallback.c Mon Sep 23 19:08:55 2013 @@ -6,6 +6,7 @@ // RUN: %clang_cl /fallback /Dfoo=bar /Ubaz /Ifoo /O0 /Ox /GR /GR- /LD /LDd \ // RUN: /MD /MDd /MTd /MT -### -- %s 2>&1 | FileCheck %s +// CHECK: "-fdiagnostics-format" "msvc-fallback" // CHECK: || // CHECK: cl.exe // CHECK: "/c" Modified: cfe/trunk/test/Misc/diag-format.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Misc/diag-format.c?rev=191250&r1=191249&r2=191250&view=diff ============================================================================== --- cfe/trunk/test/Misc/diag-format.c (original) +++ cfe/trunk/test/Misc/diag-format.c Mon Sep 23 19:08:55 2013 @@ -12,7 +12,7 @@ // // RUN: %clang -fsyntax-only -fno-show-column %s 2>&1 | FileCheck %s -check-prefix=NO_COLUMN // - +// RUN: not %clang -fsyntax-only -Werror -fdiagnostics-format=msvc-fallback %s 2>&1 | FileCheck %s -check-prefix=MSVC-FALLBACK @@ -31,4 +31,5 @@ // VI: {{.*}} +28:8: warning: extra tokens at end of #endif directive [-Wextra-tokens] // MSVC_ORIG: {{.*}}(28) : warning: extra tokens at end of #endif directive [-Wextra-tokens] // NO_COLUMN: {{.*}}:28: warning: extra tokens at end of #endif directive [-Wextra-tokens] +// MSVC-FALLBACK: {{.*}}(28,7) : error(clang): extra tokens at end of #endif directive int x; _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
