[PATCH] Adding ID and Warning Option to Diagnostic Log
Steven Wu
stevenwu at apple.com
Wed Nov 5 13:31:12 PST 2014
Ping. Is there anyone concerned about this change?
> On Oct 15, 2014, at 6:08 PM, Steven Wu <stevenwu at apple.com> wrote:
>
> Hi
>
> This patch adds two more fields to diagnostic log (not serialize-diagnostic). The two new fields are DiagnosticID and Warning Option. I find them very handy in detecting and categorizing diagnostics.
> The added fields are in a dict type in a plist so it is unlikely to break any existing tools that read diagnostic logs.
>
> Steven
>
> --
> include/clang/Frontend/LogDiagnosticPrinter.h | 3 +++
> lib/Frontend/LogDiagnosticPrinter.cpp | 14 ++++++++++++++
> 2 files changed, 17 insertions(+)
>
> diff --git a/include/clang/Frontend/LogDiagnosticPrinter.h b/include/clang/Frontend/LogDiagnosticPrinter.h
> index 8d60e9b..98adf65 100644
> --- a/include/clang/Frontend/LogDiagnosticPrinter.h
> +++ b/include/clang/Frontend/LogDiagnosticPrinter.h
> @@ -35,6 +35,9 @@ class LogDiagnosticPrinter : public DiagnosticConsumer {
>
> /// The ID of the diagnostic.
> unsigned DiagnosticID;
> +
> + /// The Option Flag for the diagnostic
> + std::string WarningOption;
>
> /// The level of the diagnostic.
> DiagnosticsEngine::Level DiagnosticLevel;
> diff --git a/lib/Frontend/LogDiagnosticPrinter.cpp b/lib/Frontend/LogDiagnosticPrinter.cpp
> index c2dcd1b..19a4660 100644
> --- a/lib/Frontend/LogDiagnosticPrinter.cpp
> +++ b/lib/Frontend/LogDiagnosticPrinter.cpp
> @@ -63,6 +63,14 @@ LogDiagnosticPrinter::EmitDiagEntry(llvm::raw_ostream &OS,
> << " ";
> EmitString(OS, DE.Message) << '\n';
> }
> + OS << " <key>ID</key>\n"
> + << " ";
> + EmitInteger(OS, DE.DiagnosticID) << '\n';
> + if (!DE.WarningOption.empty()) {
> + OS << " <key>WarningOption</key>\n"
> + << " ";
> + EmitString(OS, DE.WarningOption) << '\n';
> + }
> OS << " </dict>\n";
> }
>
> @@ -122,6 +130,12 @@ void LogDiagnosticPrinter::HandleDiagnostic(DiagnosticsEngine::Level Level,
> DE.DiagnosticID = Info.getID();
> DE.DiagnosticLevel = Level;
>
> + DE.WarningOption = "";
> + StringRef WarningOption = DiagnosticIDs::getWarningOptionForDiag(DE.DiagnosticID);
> + if (!WarningOption.empty()) {
> + DE.WarningOption = WarningOption.str();
> + }
> +
> // Format the message.
> SmallString<100> MessageStr;
> Info.FormatDiagnostic(MessageStr);
>
> <Diaglog.patch>
More information about the cfe-commits
mailing list