]> granicus.if.org Git - clang/commitdiff
Use the ShowInSystemHeader bit consistently for all diagnostics
authorAlp Toker <alp@nuanti.com>
Mon, 16 Jun 2014 13:56:47 +0000 (13:56 +0000)
committerAlp Toker <alp@nuanti.com>
Mon, 16 Jun 2014 13:56:47 +0000 (13:56 +0000)
By describing system header suppressions directly in tablegen we eliminate
special cases in getDiagnosticSeverity().

Dropping the reliance on builtin diagnostic classes when mapping also gets us
closer to the goal of reusing the diagnostic machinery for custom diagnostics.

No change in functionality.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211023 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Diagnostic.h
include/clang/Basic/Diagnostic.td
include/clang/Basic/DiagnosticFrontendKinds.td
include/clang/Basic/DiagnosticIDs.h
include/clang/Basic/DiagnosticLexKinds.td
lib/Basic/DiagnosticIDs.cpp
utils/TableGen/ClangDiagnosticsEmitter.cpp

index b0f52165bb22b4dcfdd8880cc79f8fce115ff2b0..b9da131de38adb3827dd94c46ca8c7da2863fd32 100644 (file)
@@ -651,8 +651,8 @@ public:
   /// \param Loc The source location we are interested in finding out the
   /// diagnostic state. Can be null in order to query the latest state.
   bool isIgnored(unsigned DiagID, SourceLocation Loc) const {
-    return Diags->getDiagnosticLevel(DiagID, Loc, *this) ==
-           DiagnosticIDs::Ignored;
+    return Diags->getDiagnosticSeverity(DiagID, Loc, *this) ==
+           diag::Severity::Ignored;
   }
 
   /// \brief Based on the way the client configured the DiagnosticsEngine
index dd16a6a78ce143a64e63bb2a433bd553a9b0f317..978fd59ad85975c097512183c601c969614b4b98 100644 (file)
@@ -69,7 +69,7 @@ class Diagnostic<string text, DiagClass DC, Severity defaultmapping> {
   SFINAEResponse SFINAE = SFINAE_Suppress;
   bit            AccessControl = 0;
   bit            WarningNoWerror = 0;
-  bit            WarningShowInSystemHeader = 0;
+  bit            ShowInSystemHeader = 0;
   Severity       DefaultSeverity = defaultmapping;
   DiagGroup      Group;
   string         CategoryName = "";
@@ -85,8 +85,14 @@ class AccessControl {
   SFINAEResponse SFINAE = SFINAE_AccessControl;
 }
 
+class ShowInSystemHeader {
+  bit ShowInSystemHeader = 1;
+}
+
 // FIXME: ExtWarn and Extension should also be SFINAEFailure by default.
-class Error<string str>     : Diagnostic<str, CLASS_ERROR, SEV_Error>, SFINAEFailure;
+class Error<string str>     : Diagnostic<str, CLASS_ERROR, SEV_Error>, SFINAEFailure {
+  bit ShowInSystemHeader = 1;
+}
 class Warning<string str>   : Diagnostic<str, CLASS_WARNING, SEV_Warning>;
 class Remark<string str>    : Diagnostic<str, CLASS_REMARK, SEV_Ignored>;
 class Extension<string str> : Diagnostic<str, CLASS_EXTENSION, SEV_Ignored>;
@@ -101,9 +107,6 @@ class DefaultFatal  { Severity DefaultSeverity = SEV_Fatal; }
 class DefaultWarnNoWerror {
   bit WarningNoWerror = 1;
 }
-class DefaultWarnShowInSystemHeader {
-  bit WarningShowInSystemHeader = 1;
-}
 class DefaultRemark { Severity DefaultSeverity = SEV_Remark; }
 
 // Definitions for Diagnostics.
index c084254b0f45474ff547313cfdb9cfe82393dbd9..2d6ca696955d796861e3adcfa357d0823ab837a0 100644 (file)
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-class BackendInfo : CatBackend, DefaultWarnShowInSystemHeader;
+class BackendInfo : CatBackend, ShowInSystemHeader;
 
 let Component = "Frontend" in {
 
index 8b670500cf378812f72b716a9e090a10b21a11be..c28f195b226d447f292b85709edd7aa3c586776a 100644 (file)
@@ -254,10 +254,8 @@ private:
   getDiagnosticLevel(unsigned DiagID, SourceLocation Loc,
                      const DiagnosticsEngine &Diag) const LLVM_READONLY;
 
-  /// \brief An internal implementation helper used when \p DiagClass is
-  /// already known.
   diag::Severity
-  getDiagnosticSeverity(unsigned DiagID, unsigned DiagClass, SourceLocation Loc,
+  getDiagnosticSeverity(unsigned DiagID, SourceLocation Loc,
                         const DiagnosticsEngine &Diag) const LLVM_READONLY;
 
   /// \brief Used to report a diagnostic that is finally fully formed.
index 88b4da5d37c7f8c5ae2c235ffa781d30cfcec38e..4aceaf5e4f03c1878a3d08e05589422aeab3e9ed 100644 (file)
@@ -247,7 +247,7 @@ def err_invalid_pth_file : Error<
 
 let CategoryName = "User Defined Issues" in {
 def pp_hash_warning : Warning<"%0">,
-  InGroup<PoundWarning>, DefaultWarnShowInSystemHeader;
+  InGroup<PoundWarning>, ShowInSystemHeader;
 def err_pp_hash_error : Error<"%0">;
 }
 
@@ -544,7 +544,7 @@ def err_pp_eof_in_arc_cf_code_audited : Error<
 
 def warn_pp_date_time : Warning<
   "expansion of date or time macro is not reproducible">,
-  DefaultWarnShowInSystemHeader, DefaultIgnore, InGroup<DiagGroup<"date-time">>;
+  ShowInSystemHeader, DefaultIgnore, InGroup<DiagGroup<"date-time">>;
 
 // Module map parsing
 def err_mmap_unknown_token : Error<"skipping stray token">;
index 6bc230a33cadc49d686136cf7c77104e6ba5d4fe..8fae207e8ead8ccd7b20a6b9bfe98d68907e96ab 100644 (file)
@@ -394,7 +394,7 @@ DiagnosticIDs::getDiagnosticLevel(unsigned DiagID, SourceLocation Loc,
 
   unsigned DiagClass = getBuiltinDiagClass(DiagID);
   if (DiagClass == CLASS_NOTE) return DiagnosticIDs::Note;
-  return toLevel(getDiagnosticSeverity(DiagID, DiagClass, Loc, Diag));
+  return toLevel(getDiagnosticSeverity(DiagID, Loc, Diag));
 }
 
 /// \brief Based on the way the client configured the Diagnostic
@@ -404,10 +404,9 @@ DiagnosticIDs::getDiagnosticLevel(unsigned DiagID, SourceLocation Loc,
 /// \param Loc The source location we are interested in finding out the
 /// diagnostic state. Can be null in order to query the latest state.
 diag::Severity
-DiagnosticIDs::getDiagnosticSeverity(unsigned DiagID, unsigned DiagClass,
-                                     SourceLocation Loc,
+DiagnosticIDs::getDiagnosticSeverity(unsigned DiagID, SourceLocation Loc,
                                      const DiagnosticsEngine &Diag) const {
-  assert(DiagClass != CLASS_NOTE);
+  assert(getBuiltinDiagClass(DiagID) != CLASS_NOTE);
 
   // Specific non-error diagnostics may be mapped to various levels from ignored
   // to error.  Errors can only be mapped to fatal.
@@ -431,7 +430,9 @@ DiagnosticIDs::getDiagnosticSeverity(unsigned DiagID, unsigned DiagClass,
 
   // Diagnostics of class REMARK are either printed as remarks or in case they
   // have been added to -Werror they are printed as errors.
-  if (DiagClass == CLASS_REMARK && Result == diag::Severity::Warning)
+  // FIXME: Disregarding user-requested remark mappings like this is bogus.
+  if (Result == diag::Severity::Warning &&
+      getBuiltinDiagClass(DiagID) == CLASS_REMARK)
     Result = diag::Severity::Remark;
 
   // Ignore -pedantic diagnostics inside __extension__ blocks.
@@ -491,8 +492,7 @@ DiagnosticIDs::getDiagnosticSeverity(unsigned DiagID, unsigned DiagClass,
   // If we are in a system header, we ignore it. We look at the diagnostic class
   // because we also want to ignore extensions and warnings in -Werror and
   // -pedantic-errors modes, which *map* warnings/extensions to errors.
-  if (Result >= diag::Severity::Warning && DiagClass != CLASS_ERROR &&
-      !ShowInSystemHeader && Diag.SuppressSystemWarnings && Loc.isValid() &&
+  if (Diag.SuppressSystemWarnings && !ShowInSystemHeader && Loc.isValid() &&
       Diag.getSourceManager().isInSystemHeader(
           Diag.getSourceManager().getExpansionLoc(Loc)))
     return diag::Severity::Ignored;
index 76b484e7837b38732d00a695581e23b62906ee3e..e5177554177d3a75332cb53c32453ff81b3099ad 100644 (file)
@@ -571,8 +571,7 @@ void EmitClangDiagsDefs(RecordKeeper &Records, raw_ostream &OS,
     else
       OS << ", false";
 
-    // Default warning show in system header bit.
-    if (R.getValueAsBit("WarningShowInSystemHeader"))
+    if (R.getValueAsBit("ShowInSystemHeader"))
       OS << ", true";
     else
       OS << ", false";