-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[clang][Basic] Optimize getDiagnosticSeverity() #141950
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Try not to call getDiagInfo() as often and only do it if we really have to.
@llvm/pr-subscribers-clang Author: Timm Baeder (tbaederr) ChangesTry not to call getDiagInfo() as often and only do it if we really have to. Full diff: https://github.com/llvm/llvm-project/pull/141950.diff 1 Files Affected:
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;
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/11/builds/16383 Here is the relevant piece of the build log for the reference
|
Try not to call getDiagInfo() as often and only do it if we really have to.