diff options
author | John McCall <rjmccall@apple.com> | 2011-06-15 21:46:43 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2011-06-15 21:46:43 +0000 |
commit | 923cd5744a724d9302ea12baa5476ad1c37f474d (patch) | |
tree | d6234f708f98a4a82b1cf975b3c67975f2e731f2 /lib/Basic/DiagnosticIDs.cpp | |
parent | 8246702d0cbecc3fd5748b58614ffed7ad9e04a5 (diff) |
Generate enumerators for diagnostic categories. Patch by Argyrios!
Depends on LLVM r133093.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133094 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/DiagnosticIDs.cpp')
-rw-r--r-- | lib/Basic/DiagnosticIDs.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/Basic/DiagnosticIDs.cpp b/lib/Basic/DiagnosticIDs.cpp index 61c0460663..25dbcf0a6f 100644 --- a/lib/Basic/DiagnosticIDs.cpp +++ b/lib/Basic/DiagnosticIDs.cpp @@ -14,6 +14,7 @@ #include "clang/AST/ASTDiagnostic.h" #include "clang/Analysis/AnalysisDiagnostic.h" #include "clang/Basic/DiagnosticIDs.h" +#include "clang/Basic/DiagnosticCategories.h" #include "clang/Basic/SourceManager.h" #include "clang/Driver/DriverDiagnostic.h" #include "clang/Frontend/FrontendDiagnostic.h" @@ -213,7 +214,7 @@ namespace { static const StaticDiagCategoryRec CategoryNameTable[] = { #define GET_CATEGORY_TABLE -#define CATEGORY(X) { X, STR_SIZE(X, uint8_t) }, +#define CATEGORY(X, ENUM) { X, STR_SIZE(X, uint8_t) }, #include "clang/Basic/DiagnosticGroups.inc" #undef GET_CATEGORY_TABLE { 0, 0 } @@ -684,6 +685,10 @@ bool DiagnosticIDs::ProcessDiag(Diagnostic &Diag) const { return false; if (DiagLevel >= DiagnosticIDs::Error) { + Diag.TrapErrorOccurred = true; + if (isUnrecoverable(DiagID)) + Diag.TrapUnrecoverableErrorOccurred = true; + if (Diag.Client->IncludeInDiagnosticCounts()) { Diag.ErrorOccurred = true; ++Diag.NumErrors; @@ -720,3 +725,20 @@ bool DiagnosticIDs::ProcessDiag(Diagnostic &Diag) const { return true; } + +bool DiagnosticIDs::isUnrecoverable(unsigned DiagID) const { + if (DiagID >= diag::DIAG_UPPER_LIMIT) { + // Custom diagnostics. + return CustomDiagInfo->getLevel(DiagID) >= DiagnosticIDs::Error; + } + + // Only errors may be unrecoverable. + if (getBuiltinDiagClass(DiagID) < DiagnosticIDs::Error) + return false; + + if (DiagID == diag::err_unavailable || + DiagID == diag::err_unavailable_message) + return false; + + return true; +} |