[clang-tools-extra] [clang-tidy] Speed up deduplicating warnings from alias checks (PR #174237)
Baranov Victor via cfe-commits
cfe-commits at lists.llvm.org
Sat Jan 3 08:53:57 PST 2026
================
@@ -778,43 +776,35 @@ std::vector<ClangTidyError> ClangTidyDiagnosticConsumer::take() {
llvm::stable_sort(Errors, LessClangTidyError());
Errors.erase(llvm::unique(Errors, EqualClangTidyError()), Errors.end());
- if (RemoveIncompatibleErrors)
+ if (RemoveIncompatibleErrors) {
+ removeDuplicatedDiagnosticsOfAliasCheckers();
removeIncompatibleErrors();
+ }
return std::move(Errors);
}
-namespace {
-struct LessClangTidyErrorWithoutDiagnosticName {
- bool operator()(const ClangTidyError *LHS, const ClangTidyError *RHS) const {
- const tooling::DiagnosticMessage &M1 = LHS->Message;
- const tooling::DiagnosticMessage &M2 = RHS->Message;
-
- return std::tie(M1.FilePath, M1.FileOffset, M1.Message) <
- std::tie(M2.FilePath, M2.FileOffset, M2.Message);
- }
-};
-} // end anonymous namespace
-
void ClangTidyDiagnosticConsumer::removeDuplicatedDiagnosticsOfAliasCheckers() {
- using UniqueErrorSet =
- std::set<ClangTidyError *, LessClangTidyErrorWithoutDiagnosticName>;
- UniqueErrorSet UniqueErrors;
+ if (Errors.size() <= 1)
+ return;
- auto IT = Errors.begin();
- while (IT != Errors.end()) {
- ClangTidyError &Error = *IT;
- const std::pair<UniqueErrorSet::iterator, bool> Inserted =
- UniqueErrors.insert(&Error);
+ static constexpr auto Projection = [](const ClangTidyError &E) {
+ const tooling::DiagnosticMessage &M = E.Message;
+ return std::tie(M.FilePath, M.FileOffset, M.Message);
+ };
+ auto LastUniqueError = Errors.begin();
----------------
vbvictor wrote:
```suggestion
auto LastUniqueErrorIt = Errors.begin();
```
https://github.com/llvm/llvm-project/pull/174237
More information about the cfe-commits
mailing list