From ad7245b90fe9edd01b663f0e17521c9ae42d619e Mon Sep 17 00:00:00 2001 From: Alp Toker Date: Sun, 22 Jun 2014 21:58:33 +0000 Subject: DiagnosticIDs: use diagnostic severities to simplify extension handling git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211479 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/Diagnostic.h | 15 +++------------ lib/Basic/Diagnostic.cpp | 2 +- lib/Basic/DiagnosticIDs.cpp | 19 ++----------------- lib/Basic/Warnings.cpp | 6 +++--- lib/Lex/PPMacroExpansion.cpp | 4 ++-- lib/Serialization/ASTReader.cpp | 12 +++++------- 6 files changed, 16 insertions(+), 42 deletions(-) diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h index b9da131de3..71642a9b7e 100644 --- a/include/clang/Basic/Diagnostic.h +++ b/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 Diags; IntrusiveRefCntPtr 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/lib/Basic/Diagnostic.cpp b/lib/Basic/Diagnostic.cpp index 686e50496e..f784fe7c32 100644 --- a/lib/Basic/Diagnostic.cpp +++ b/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/lib/Basic/DiagnosticIDs.cpp b/lib/Basic/DiagnosticIDs.cpp index c7a3e9704a..0bb0b9f928 100644 --- a/lib/Basic/DiagnosticIDs.cpp +++ b/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/lib/Basic/Warnings.cpp b/lib/Basic/Warnings.cpp index 98f85a053b..196a215463 100644 --- a/lib/Basic/Warnings.cpp +++ b/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 _Diags; const IntrusiveRefCntPtr< DiagnosticIDs > DiagIDs = diff --git a/lib/Lex/PPMacroExpansion.cpp b/lib/Lex/PPMacroExpansion.cpp index b22d9d4590..26b99fa21f 100644 --- a/lib/Lex/PPMacroExpansion.cpp +++ b/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/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index 777ea83198..5ac6ccc10e 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/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, -- cgit v1.2.3