https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/141950
Try not to call getDiagInfo() as often and only do it if we really have to. >From 1946e68dab09b4eec02a742e61d2928abd5fc60e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com> Date: Thu, 29 May 2025 13:00:07 +0200 Subject: [PATCH] [clang][Basic] Optimize getDiagnosticSeverity() Try not to call getDiagInfo() as often and only do it if we really have to. --- clang/lib/Basic/DiagnosticIDs.cpp | 36 ++++++++++++++++++------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/clang/lib/Basic/DiagnosticIDs.cpp b/clang/lib/Basic/DiagnosticIDs.cpp index f01ff4df84e6a..ae1484519e812 100644 --- a/clang/lib/Basic/DiagnosticIDs.cpp +++ b/clang/lib/Basic/DiagnosticIDs.cpp @@ -543,26 +543,32 @@ DiagnosticIDs::getDiagnosticSeverity(unsigned DiagID, SourceLocation Loc, return Result; const auto &SM = Diag.getSourceManager(); - - bool ShowInSystemHeader = - IsCustomDiag - ? CustomDiagInfo->getDescription(DiagID).ShouldShowInSystemHeader() - : !GetDiagInfo(DiagID) || GetDiagInfo(DiagID)->WarnShowInSystemHeader; - // 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 (State->SuppressSystemWarnings && !ShowInSystemHeader && Loc.isValid() && - SM.isInSystemHeader(SM.getExpansionLoc(Loc))) - return diag::Severity::Ignored; - + if (State->SuppressSystemWarnings && Loc.isValid() && + SM.isInSystemHeader(SM.getExpansionLoc(Loc))) { + bool ShowInSystemHeader = false; + if (IsCustomDiag) + ShowInSystemHeader = + CustomDiagInfo->getDescription(DiagID).ShouldShowInSystemHeader(); + else if (const StaticDiagInfoRec *Rec = GetDiagInfo(DiagID)) + ShowInSystemHeader = Rec->WarnShowInSystemHeader; + + if (!ShowInSystemHeader) + return diag::Severity::Ignored; + } // We also ignore warnings due to system macros - bool ShowInSystemMacro = - !GetDiagInfo(DiagID) || GetDiagInfo(DiagID)->WarnShowInSystemMacro; - if (State->SuppressSystemWarnings && !ShowInSystemMacro && Loc.isValid() && - SM.isInSystemMacro(Loc)) - return diag::Severity::Ignored; + if (State->SuppressSystemWarnings && Loc.isValid() && + SM.isInSystemMacro(Loc)) { + + bool ShowInSystemMacro = false; + if (const StaticDiagInfoRec *Rec = GetDiagInfo(DiagID)) + ShowInSystemMacro = Rec->WarnShowInSystemMacro; + if (!ShowInSystemMacro) + return diag::Severity::Ignored; + } // Clang-diagnostics pragmas always take precedence over suppression mapping. if (!Mapping.isPragma() && Diag.isSuppressedViaMapping(DiagID, Loc)) return diag::Severity::Ignored; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits