diff options
| -rw-r--r-- | clang/include/clang/AST/ASTDiagnostic.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Analysis/AnalysisDiagnostic.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Basic/Diagnostic.td | 10 | ||||
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticIDs.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Driver/DriverDiagnostic.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Frontend/FrontendDiagnostic.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Lex/LexDiagnostic.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Parse/ParseDiagnostic.h | 2 | ||||
| -rw-r--r-- | clang/include/clang/Sema/SemaDiagnostic.h | 2 | ||||
| -rw-r--r-- | clang/lib/Basic/DiagnosticIDs.cpp | 32 | 
10 files changed, 40 insertions, 18 deletions
diff --git a/clang/include/clang/AST/ASTDiagnostic.h b/clang/include/clang/AST/ASTDiagnostic.h index 846321bd399..b0057113cf8 100644 --- a/clang/include/clang/AST/ASTDiagnostic.h +++ b/clang/include/clang/AST/ASTDiagnostic.h @@ -16,7 +16,7 @@ namespace clang {    namespace diag {      enum {  #define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, +             SFINAE,ACCESS,NOWERROR,SHOWINSYSHEADER,CATEGORY,BRIEF,FULL) ENUM,  #define ASTSTART  #include "clang/Basic/DiagnosticASTKinds.inc"  #undef DIAG diff --git a/clang/include/clang/Analysis/AnalysisDiagnostic.h b/clang/include/clang/Analysis/AnalysisDiagnostic.h index dbf4e4c9aef..16d31b47642 100644 --- a/clang/include/clang/Analysis/AnalysisDiagnostic.h +++ b/clang/include/clang/Analysis/AnalysisDiagnostic.h @@ -16,7 +16,7 @@ namespace clang {    namespace diag {      enum {  #define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, +             SFINAE,ACCESS,NOWERROR,SHOWINSYSHEADER,CATEGORY,BRIEF,FULL) ENUM,  #define ANALYSISSTART  #include "clang/Basic/DiagnosticAnalysisKinds.inc"  #undef DIAG diff --git a/clang/include/clang/Basic/Diagnostic.td b/clang/include/clang/Basic/Diagnostic.td index 50a22c4a912..8ae69fef278 100644 --- a/clang/include/clang/Basic/Diagnostic.td +++ b/clang/include/clang/Basic/Diagnostic.td @@ -18,8 +18,6 @@ def MAP_IGNORE  : DiagMapping;  def MAP_WARNING : DiagMapping;  def MAP_ERROR   : DiagMapping;  def MAP_FATAL   : DiagMapping; -def MAP_WARNING_NO_WERROR             : DiagMapping; -def MAP_WARNING_SHOW_IN_SYSTEM_HEADER : DiagMapping;  // Define the diagnostic classes.  class DiagClass; @@ -59,6 +57,8 @@ class Diagnostic<string text, DiagClass DC, DiagMapping defaultmapping> {    DiagClass   Class = DC;    bit         SFINAE = 1;    bit         AccessControl = 0; +  bit         WarningNoWerror = 0; +  bit         WarningShowInSystemHeader = 0;    DiagMapping DefaultMapping = defaultmapping;    DiagGroup   Group;    string      CategoryName = ""; @@ -77,9 +77,11 @@ class DefaultIgnore { DiagMapping DefaultMapping = MAP_IGNORE; }  class DefaultWarn   { DiagMapping DefaultMapping = MAP_WARNING; }  class DefaultError  { DiagMapping DefaultMapping = MAP_ERROR; }  class DefaultFatal  { DiagMapping DefaultMapping = MAP_FATAL; } -class DefaultWarnNoWerror { DiagMapping DefaultMapping= MAP_WARNING_NO_WERROR; } +class DefaultWarnNoWerror { +  bit WarningNoWerror = 1; +}  class DefaultWarnShowInSystemHeader { -  DiagMapping DefaultMapping = MAP_WARNING_SHOW_IN_SYSTEM_HEADER; +  bit WarningShowInSystemHeader = 1;  }  class NoSFINAE { bit SFINAE = 0; } diff --git a/clang/include/clang/Basic/DiagnosticIDs.h b/clang/include/clang/Basic/DiagnosticIDs.h index 1169f9ce3f3..d014662e3eb 100644 --- a/clang/include/clang/Basic/DiagnosticIDs.h +++ b/clang/include/clang/Basic/DiagnosticIDs.h @@ -44,7 +44,7 @@ namespace clang {      // Get typedefs for common diagnostics.      enum {  #define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, +             SFINAE,ACCESS,CATEGORY,NOWERROR,SHOWINSYSHEADER,BRIEF,FULL) ENUM,  #include "clang/Basic/DiagnosticCommonKinds.inc"        NUM_BUILTIN_COMMON_DIAGNOSTICS  #undef DIAG diff --git a/clang/include/clang/Driver/DriverDiagnostic.h b/clang/include/clang/Driver/DriverDiagnostic.h index 0f9376b8dea..844f918c1b2 100644 --- a/clang/include/clang/Driver/DriverDiagnostic.h +++ b/clang/include/clang/Driver/DriverDiagnostic.h @@ -16,7 +16,7 @@ namespace clang {    namespace diag {      enum {  #define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, +             SFINAE,ACCESS,NOWERROR,SHOWINSYSHEADER,CATEGORY,BRIEF,FULL) ENUM,  #define DRIVERSTART  #include "clang/Basic/DiagnosticDriverKinds.inc"  #undef DIAG diff --git a/clang/include/clang/Frontend/FrontendDiagnostic.h b/clang/include/clang/Frontend/FrontendDiagnostic.h index 3e9508c009c..21cd2c67910 100644 --- a/clang/include/clang/Frontend/FrontendDiagnostic.h +++ b/clang/include/clang/Frontend/FrontendDiagnostic.h @@ -16,7 +16,7 @@ namespace clang {    namespace diag {      enum {  #define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, +             SFINAE,ACCESS,NOWERROR,SHOWINSYSHEADER,CATEGORY,BRIEF,FULL) ENUM,  #define FRONTENDSTART  #include "clang/Basic/DiagnosticFrontendKinds.inc"  #undef DIAG diff --git a/clang/include/clang/Lex/LexDiagnostic.h b/clang/include/clang/Lex/LexDiagnostic.h index 7d2eb89c50b..f454e2309ac 100644 --- a/clang/include/clang/Lex/LexDiagnostic.h +++ b/clang/include/clang/Lex/LexDiagnostic.h @@ -16,7 +16,7 @@ namespace clang {    namespace diag {      enum {  #define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, +             SFINAE,ACCESS,NOWERROR,SHOWINSYSHEADER,CATEGORY,BRIEF,FULL) ENUM,  #define LEXSTART  #include "clang/Basic/DiagnosticLexKinds.inc"  #undef DIAG diff --git a/clang/include/clang/Parse/ParseDiagnostic.h b/clang/include/clang/Parse/ParseDiagnostic.h index c50ac92f6e8..0e76c614152 100644 --- a/clang/include/clang/Parse/ParseDiagnostic.h +++ b/clang/include/clang/Parse/ParseDiagnostic.h @@ -16,7 +16,7 @@ namespace clang {    namespace diag {      enum {  #define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, +             SFINAE,ACCESS,NOWERROR,SHOWINSYSHEADER,CATEGORY,BRIEF,FULL) ENUM,  #define PARSESTART  #include "clang/Basic/DiagnosticParseKinds.inc"  #undef DIAG diff --git a/clang/include/clang/Sema/SemaDiagnostic.h b/clang/include/clang/Sema/SemaDiagnostic.h index 83c0999ad49..2c4bf4b0d1b 100644 --- a/clang/include/clang/Sema/SemaDiagnostic.h +++ b/clang/include/clang/Sema/SemaDiagnostic.h @@ -16,7 +16,7 @@ namespace clang {    namespace diag {      enum {  #define DIAG(ENUM,FLAGS,DEFAULT_MAPPING,DESC,GROUP,\ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL) ENUM, +             SFINAE,ACCESS,NOWERROR,SHOWINSYSHEADER,CATEGORY,BRIEF,FULL) ENUM,  #define SEMASTART  #include "clang/Basic/DiagnosticSemaKinds.inc"  #undef DIAG diff --git a/clang/lib/Basic/DiagnosticIDs.cpp b/clang/lib/Basic/DiagnosticIDs.cpp index 4b88c60ead9..6e82ba5ff62 100644 --- a/clang/lib/Basic/DiagnosticIDs.cpp +++ b/clang/lib/Basic/DiagnosticIDs.cpp @@ -46,6 +46,8 @@ struct StaticDiagInfoRec {    unsigned Class : 3;    unsigned SFINAE : 1;    unsigned AccessControl : 1; +  unsigned WarnNoWerror : 1; +  unsigned WarnShowInSystemHeader : 1;    unsigned Category : 5;    uint8_t  NameLen; @@ -115,8 +117,10 @@ public:  static const StaticDiagInfoRec StaticDiagInfo[] = {  #define DIAG(ENUM,CLASS,DEFAULT_MAPPING,DESC,GROUP,               \ -             SFINAE,ACCESS,CATEGORY,BRIEF,FULL)                   \ -  { diag::ENUM, DEFAULT_MAPPING, CLASS, SFINAE, ACCESS, CATEGORY, \ +             SFINAE,ACCESS,NOWERROR,SHOWINSYSHEADER,              \ +             CATEGORY,BRIEF,FULL)                                 \ +  { diag::ENUM, DEFAULT_MAPPING, CLASS, SFINAE, ACCESS,           \ +    NOWERROR, SHOWINSYSHEADER, CATEGORY,                          \      STR_SIZE(#ENUM, uint8_t), STR_SIZE(GROUP, uint8_t),           \      STR_SIZE(DESC, uint16_t), STR_SIZE(BRIEF, uint16_t),          \      STR_SIZE(FULL, uint16_t),                                     \ @@ -130,7 +134,7 @@ static const StaticDiagInfoRec StaticDiagInfo[] = {  #include "clang/Basic/DiagnosticSemaKinds.inc"  #include "clang/Basic/DiagnosticAnalysisKinds.inc"  #undef DIAG -  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}  };  static const unsigned StaticDiagInfoSize = @@ -168,7 +172,7 @@ static const StaticDiagInfoRec *GetDiagInfo(unsigned DiagID) {    // Search the diagnostic table with a binary search.    StaticDiagInfoRec Find = { static_cast<unsigned short>(DiagID), -                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};    const StaticDiagInfoRec *Found =      std::lower_bound(StaticDiagInfo, StaticDiagInfo + StaticDiagInfoSize, Find); @@ -180,8 +184,24 @@ static const StaticDiagInfoRec *GetDiagInfo(unsigned DiagID) {  }  static unsigned GetDefaultDiagMapping(unsigned DiagID) { -  if (const StaticDiagInfoRec *Info = GetDiagInfo(DiagID)) -    return Info->Mapping; +  if (const StaticDiagInfoRec *Info = GetDiagInfo(DiagID)) { +    // Compute the effective mapping based on the extra bits. +    unsigned Mapping = Info->Mapping; + +    if (Info->WarnNoWerror) { +      assert(Mapping == diag::MAP_WARNING && +             "Unexpected mapping with no-Werror bit!"); +      Mapping = diag::MAP_WARNING_NO_WERROR; +    } + +    if (Info->WarnShowInSystemHeader) { +      assert(Mapping == diag::MAP_WARNING && +             "Unexpected mapping with show-in-system-header bit!"); +      Mapping = diag::MAP_WARNING_SHOW_IN_SYSTEM_HEADER; +    } + +    return Mapping; +  }    return diag::MAP_FATAL;  }  | 

