diff options
author | Alp Toker <alp@nuanti.com> | 2014-06-22 21:58:33 +0000 |
---|---|---|
committer | Alp Toker <alp@nuanti.com> | 2014-06-22 21:58:33 +0000 |
commit | ac4e8e5fcad38e749a1e151b124fd3e71c6747a6 (patch) | |
tree | 5f6df8655b15aaafd0649799aa816c0f443ffc52 | |
parent | 343cd6f0560bfd0e82b8546e357aa31856e97bc6 (diff) | |
download | bcm5719-llvm-ac4e8e5fcad38e749a1e151b124fd3e71c6747a6.tar.gz bcm5719-llvm-ac4e8e5fcad38e749a1e151b124fd3e71c6747a6.zip |
DiagnosticIDs: use diagnostic severities to simplify extension handling
llvm-svn: 211479
-rw-r--r-- | clang/include/clang/Basic/Diagnostic.h | 15 | ||||
-rw-r--r-- | clang/lib/Basic/Diagnostic.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Basic/DiagnosticIDs.cpp | 19 | ||||
-rw-r--r-- | clang/lib/Basic/Warnings.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Lex/PPMacroExpansion.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 12 |
6 files changed, 16 insertions, 42 deletions
diff --git a/clang/include/clang/Basic/Diagnostic.h b/clang/include/clang/Basic/Diagnostic.h index b9da131de38..71642a9b7eb 100644 --- a/clang/include/clang/Basic/Diagnostic.h +++ b/clang/include/clang/Basic/Diagnostic.h @@ -146,13 +146,6 @@ public: Fatal = DiagnosticIDs::Fatal }; - /// \brief How do we handle otherwise-unmapped extension? - /// - /// This is controlled by -pedantic and -pedantic-errors. - enum ExtensionHandling { - Ext_Ignore, Ext_Warn, Ext_Error - }; - enum ArgumentKind { ak_std_string, ///< std::string ak_c_string, ///< const char * @@ -190,7 +183,7 @@ private: // 0 -> no limit. unsigned ConstexprBacktraceLimit; // Cap on depth of constexpr evaluation // backtrace stack, 0 -> no limit. - ExtensionHandling ExtBehavior; // Map extensions onto warnings or errors? + diag::Severity ExtBehavior; // Map extensions to warnings or errors? IntrusiveRefCntPtr<DiagnosticIDs> Diags; IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts; DiagnosticConsumer *Client; @@ -523,10 +516,8 @@ public: /// mapped onto ignore/warning/error. /// /// This corresponds to the GCC -pedantic and -pedantic-errors option. - void setExtensionHandlingBehavior(ExtensionHandling H) { - ExtBehavior = H; - } - ExtensionHandling getExtensionHandlingBehavior() const { return ExtBehavior; } + void setExtensionHandlingBehavior(diag::Severity H) { ExtBehavior = H; } + diag::Severity getExtensionHandlingBehavior() const { return ExtBehavior; } /// \brief Counter bumped when an __extension__ block is/ encountered. /// diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index 686e50496e6..f784fe7c321 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -54,7 +54,7 @@ DiagnosticsEngine::DiagnosticsEngine( PrintTemplateTree = false; ShowColors = false; ShowOverloads = Ovl_All; - ExtBehavior = Ext_Ignore; + ExtBehavior = diag::Severity::Ignored; ErrorLimit = 0; TemplateBacktraceLimit = 0; diff --git a/clang/lib/Basic/DiagnosticIDs.cpp b/clang/lib/Basic/DiagnosticIDs.cpp index c7a3e9704ac..0bb0b9f928e 100644 --- a/clang/lib/Basic/DiagnosticIDs.cpp +++ b/clang/lib/Basic/DiagnosticIDs.cpp @@ -440,23 +440,8 @@ DiagnosticIDs::getDiagnosticSeverity(unsigned DiagID, SourceLocation Loc, // For extension diagnostics that haven't been explicitly mapped, check if we // should upgrade the diagnostic. - if (IsExtensionDiag && !Mapping.isUser()) { - switch (Diag.ExtBehavior) { - case DiagnosticsEngine::Ext_Ignore: - break; - case DiagnosticsEngine::Ext_Warn: - // Upgrade ignored diagnostics to warnings. - if (Result == diag::Severity::Ignored) - Result = diag::Severity::Warning; - break; - case DiagnosticsEngine::Ext_Error: - // Upgrade ignored or warning diagnostics to errors. - if (Result == diag::Severity::Ignored || - Result == diag::Severity::Warning) - Result = diag::Severity::Error; - break; - } - } + if (IsExtensionDiag && !Mapping.isUser()) + Result = std::max(Result, Diag.ExtBehavior); // At this point, ignored errors can no longer be upgraded. if (Result == diag::Severity::Ignored) diff --git a/clang/lib/Basic/Warnings.cpp b/clang/lib/Basic/Warnings.cpp index 98f85a053b0..196a215463a 100644 --- a/clang/lib/Basic/Warnings.cpp +++ b/clang/lib/Basic/Warnings.cpp @@ -67,11 +67,11 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, // extension diagnostics onto WARNING or ERROR unless the user has futz'd // around with them explicitly. if (Opts.PedanticErrors) - Diags.setExtensionHandlingBehavior(DiagnosticsEngine::Ext_Error); + Diags.setExtensionHandlingBehavior(diag::Severity::Error); else if (Opts.Pedantic) - Diags.setExtensionHandlingBehavior(DiagnosticsEngine::Ext_Warn); + Diags.setExtensionHandlingBehavior(diag::Severity::Warning); else - Diags.setExtensionHandlingBehavior(DiagnosticsEngine::Ext_Ignore); + Diags.setExtensionHandlingBehavior(diag::Severity::Ignored); SmallVector<diag::kind, 10> _Diags; const IntrusiveRefCntPtr< DiagnosticIDs > DiagIDs = diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp index b22d9d45904..26b99fa21fb 100644 --- a/clang/lib/Lex/PPMacroExpansion.cpp +++ b/clang/lib/Lex/PPMacroExpansion.cpp @@ -1006,8 +1006,8 @@ static bool HasExtension(const Preprocessor &PP, const IdentifierInfo *II) { // If the use of an extension results in an error diagnostic, extensions are // effectively unavailable, so just return false here. - if (PP.getDiagnostics().getExtensionHandlingBehavior() == - DiagnosticsEngine::Ext_Error) + if (PP.getDiagnostics().getExtensionHandlingBehavior() >= + diag::Severity::Error) return false; const LangOptions &LangOpts = PP.getLangOpts(); diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 777ea831981..5ac6ccc10e9 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -328,13 +328,11 @@ static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags, return false; } -static DiagnosticsEngine::ExtensionHandling -isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) { - DiagnosticsEngine::ExtensionHandling Ext = - Diags.getExtensionHandlingBehavior(); - if (Ext == DiagnosticsEngine::Ext_Warn && Diags.getWarningsAsErrors()) - Ext = DiagnosticsEngine::Ext_Error; - return Ext; +static bool isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) { + diag::Severity Ext = Diags.getExtensionHandlingBehavior(); + if (Ext == diag::Severity::Warning && Diags.getWarningsAsErrors()) + return true; + return Ext >= diag::Severity::Error; } static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, |