зеркало из https://github.com/microsoft/clang-1.git
add the ability to associate 'category' names with diagnostics
and diagnostic groups. This allows the compiler to group diagnostics together (e.g. "Logic Warning", "Format String Warning", etc) like the static analyzer does. This is not exposed through anything in the compiler yet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103051 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
8b688ed1d5
Коммит
27b0f510d1
|
@ -15,7 +15,7 @@
|
|||
namespace clang {
|
||||
namespace diag {
|
||||
enum {
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
|
||||
#define ASTSTART
|
||||
#include "clang/Basic/DiagnosticASTKinds.inc"
|
||||
#undef DIAG
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
namespace clang {
|
||||
namespace diag {
|
||||
enum {
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
|
||||
#define ANALYSISSTART
|
||||
#include "clang/Basic/DiagnosticAnalysisKinds.inc"
|
||||
#undef DIAG
|
||||
|
|
|
@ -60,7 +60,7 @@ namespace clang {
|
|||
|
||||
// Get typedefs for common diagnostics.
|
||||
enum {
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
|
||||
#include "clang/Basic/DiagnosticCommonKinds.inc"
|
||||
NUM_BUILTIN_COMMON_DIAGNOSTICS
|
||||
#undef DIAG
|
||||
|
|
|
@ -26,10 +26,17 @@ def CLASS_WARNING : DiagClass;
|
|||
def CLASS_EXTENSION : DiagClass;
|
||||
def CLASS_ERROR : DiagClass;
|
||||
|
||||
// Diagnostic Categories. These can be applied to groups or individual
|
||||
// diagnostics to specify a category.
|
||||
class DiagCategory<string Name> {
|
||||
string CategoryName = Name;
|
||||
}
|
||||
|
||||
// Diagnostic Groups.
|
||||
class DiagGroup<string Name, list<DiagGroup> subgroups = []> {
|
||||
string GroupName = Name;
|
||||
list<DiagGroup> SubGroups = subgroups;
|
||||
string CategoryName = "";
|
||||
}
|
||||
class InGroup<DiagGroup G> { DiagGroup Group = G; }
|
||||
//class IsGroup<string Name> { DiagGroup Group = DiagGroup<Name>; }
|
||||
|
@ -48,6 +55,7 @@ class Diagnostic<string text, DiagClass DC, DiagMapping defaultmapping> {
|
|||
bit SFINAE = 1;
|
||||
DiagMapping DefaultMapping = defaultmapping;
|
||||
DiagGroup Group;
|
||||
string CategoryName = "";
|
||||
}
|
||||
|
||||
class Error<string str> : Diagnostic<str, CLASS_ERROR, MAP_ERROR>;
|
||||
|
|
|
@ -15,8 +15,6 @@ def Implicit : DiagGroup<"implicit", [
|
|||
ImplicitFunctionDeclare,
|
||||
ImplicitInt
|
||||
]>;
|
||||
|
||||
|
||||
|
||||
// Empty DiagGroups are recognized by clang but ignored.
|
||||
def : DiagGroup<"address">;
|
||||
|
@ -102,7 +100,7 @@ def : DiagGroup<"strict-prototypes">;
|
|||
def : DiagGroup<"strict-selector-match">;
|
||||
def SwitchEnum : DiagGroup<"switch-enum">;
|
||||
def Switch : DiagGroup<"switch", [SwitchEnum]>;
|
||||
def Trigraphs : DiagGroup<"trigraphs">;
|
||||
def Trigraphs : DiagGroup<"trigraphs">;
|
||||
|
||||
def : DiagGroup<"type-limits">;
|
||||
def Uninitialized : DiagGroup<"uninitialized">;
|
||||
|
@ -135,7 +133,8 @@ def Parentheses : DiagGroup<"parentheses", [DiagGroup<"idiomatic-parentheses">]>
|
|||
// -Wconversion has its own warnings, but we split this one out for
|
||||
// legacy reasons.
|
||||
def Conversion : DiagGroup<"conversion",
|
||||
[DiagGroup<"shorten-64-to-32">]>;
|
||||
[DiagGroup<"shorten-64-to-32">]>,
|
||||
DiagCategory<"Value Conversion">;
|
||||
|
||||
def Unused : DiagGroup<"unused",
|
||||
[UnusedArgument, UnusedFunction, UnusedLabel,
|
||||
|
@ -143,7 +142,8 @@ def Unused : DiagGroup<"unused",
|
|||
UnusedValue, UnusedVariable]>;
|
||||
|
||||
// Format settings.
|
||||
def Format : DiagGroup<"format", [FormatExtraArgs, FormatZeroLength, NonNull]>;
|
||||
def Format : DiagGroup<"format", [FormatExtraArgs, FormatZeroLength, NonNull]>,
|
||||
DiagCategory<"Format String">;
|
||||
def FormatSecurity : DiagGroup<"format-security", [Format]>;
|
||||
def FormatNonLiteral : DiagGroup<"format-nonliteral", [FormatSecurity]>;
|
||||
def FormatY2K : DiagGroup<"format-y2k", [Format]>;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
namespace clang {
|
||||
namespace diag {
|
||||
enum {
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
|
||||
#define DRIVERSTART
|
||||
#include "clang/Basic/DiagnosticDriverKinds.inc"
|
||||
#undef DIAG
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
namespace clang {
|
||||
namespace diag {
|
||||
enum {
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
|
||||
#define FRONTENDSTART
|
||||
#include "clang/Basic/DiagnosticFrontendKinds.inc"
|
||||
#undef DIAG
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
namespace clang {
|
||||
namespace diag {
|
||||
enum {
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
|
||||
#define LEXSTART
|
||||
#include "clang/Basic/DiagnosticLexKinds.inc"
|
||||
#undef DIAG
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
namespace clang {
|
||||
namespace diag {
|
||||
enum {
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
|
||||
#define PARSESTART
|
||||
#include "clang/Basic/DiagnosticParseKinds.inc"
|
||||
#undef DIAG
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
namespace clang {
|
||||
namespace diag {
|
||||
enum {
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) ENUM,
|
||||
#define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,SFINAE,CATEGORY) ENUM,
|
||||
#define SEMASTART
|
||||
#include "clang/Basic/DiagnosticSemaKinds.inc"
|
||||
#undef DIAG
|
||||
|
|
|
@ -51,6 +51,8 @@ struct StaticDiagInfoRec {
|
|||
unsigned Mapping : 3;
|
||||
unsigned Class : 3;
|
||||
bool SFINAE : 1;
|
||||
unsigned Category : 5;
|
||||
|
||||
const char *Description;
|
||||
const char *OptionGroup;
|
||||
|
||||
|
@ -63,8 +65,8 @@ struct StaticDiagInfoRec {
|
|||
};
|
||||
|
||||
static const StaticDiagInfoRec StaticDiagInfo[] = {
|
||||
#define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP,SFINAE) \
|
||||
{ diag::ENUM, DEFAULT_MAPPING, CLASS, SFINAE, DESC, GROUP },
|
||||
#define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP,SFINAE, CATEGORY) \
|
||||
{ diag::ENUM, DEFAULT_MAPPING, CLASS, SFINAE, CATEGORY, DESC, GROUP },
|
||||
#include "clang/Basic/DiagnosticCommonKinds.inc"
|
||||
#include "clang/Basic/DiagnosticDriverKinds.inc"
|
||||
#include "clang/Basic/DiagnosticFrontendKinds.inc"
|
||||
|
@ -73,7 +75,7 @@ static const StaticDiagInfoRec StaticDiagInfo[] = {
|
|||
#include "clang/Basic/DiagnosticASTKinds.inc"
|
||||
#include "clang/Basic/DiagnosticSemaKinds.inc"
|
||||
#include "clang/Basic/DiagnosticAnalysisKinds.inc"
|
||||
{ 0, 0, 0, 0, 0, 0}
|
||||
{ 0, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
#undef DIAG
|
||||
|
||||
|
@ -99,7 +101,7 @@ static const StaticDiagInfoRec *GetDiagInfo(unsigned DiagID) {
|
|||
#endif
|
||||
|
||||
// Search the diagnostic table with a binary search.
|
||||
StaticDiagInfoRec Find = { DiagID, 0, 0, 0, 0, 0 };
|
||||
StaticDiagInfoRec Find = { DiagID, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
const StaticDiagInfoRec *Found =
|
||||
std::lower_bound(StaticDiagInfo, StaticDiagInfo + NumDiagEntries, Find);
|
||||
|
|
Загрузка…
Ссылка в новой задаче