[clang-tools-extra] [clang-tidy][NFC] Enable readability-any-all-of check (PR #167134)
Baranov Victor via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 10 12:52:25 PST 2025
https://github.com/vbvictor updated https://github.com/llvm/llvm-project/pull/167134
>From bb85bacbb735e16a6a75431d7ae24c743a617612 Mon Sep 17 00:00:00 2001
From: Victor Baranov <bar.victor.2002 at gmail.com>
Date: Sat, 8 Nov 2025 15:20:50 +0300
Subject: [PATCH 1/2] [clang-tidy][NFC] Enable readability-any-all-of check
---
clang-tools-extra/clang-tidy/.clang-tidy | 3 +--
.../ClangTidyDiagnosticConsumer.cpp | 9 ++++-----
.../clang-tidy/bugprone/BranchCloneCheck.cpp | 9 +++------
.../CapturingThisInMemberVariableCheck.cpp | 17 +++++++++--------
.../EasilySwappableParametersCheck.cpp | 8 +++-----
.../clang-tidy/bugprone/InfiniteLoopCheck.cpp | 18 ++++++------------
.../bugprone/SuspiciousReallocUsageCheck.cpp | 7 +++----
.../ProBoundsArrayToPointerDecayCheck.cpp | 8 ++++----
.../fuchsia/VirtualInheritanceCheck.cpp | 7 +++----
.../misc/NewDeleteOverloadsCheck.cpp | 10 ++++------
.../clang-tidy/misc/UnusedParametersCheck.cpp | 11 ++++-------
.../clang-tidy/modernize/LoopConvertCheck.cpp | 19 ++++++++-----------
.../clang-tidy/modernize/LoopConvertUtils.cpp | 18 ++++++------------
.../clang-tidy/modernize/PassByValueCheck.cpp | 6 +-----
.../clang-tidy/modernize/UseEmplaceCheck.cpp | 14 +++++---------
.../modernize/UseTrailingReturnTypeCheck.cpp | 11 +++++------
.../clang-tidy/objc/MissingHashCheck.cpp | 8 +++-----
.../TriviallyDestructibleCheck.cpp | 9 +++------
.../AmbiguousSmartptrResetCallCheck.cpp | 8 ++------
.../OperatorsRepresentationCheck.cpp | 8 +++-----
.../SuspiciousCallArgumentCheck.cpp | 10 ++++------
.../clang-tidy/utils/Aliasing.cpp | 12 +++---------
.../clang-tidy/utils/DeclRefExprUtils.cpp | 5 +----
.../clang-tidy/utils/ExprSequence.cpp | 9 +++------
.../clang-tidy/utils/TypeTraits.cpp | 19 ++++++++-----------
25 files changed, 99 insertions(+), 164 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/.clang-tidy b/clang-tools-extra/clang-tidy/.clang-tidy
index 0c2f34b529016..be52e595b7e52 100644
--- a/clang-tools-extra/clang-tidy/.clang-tidy
+++ b/clang-tools-extra/clang-tidy/.clang-tidy
@@ -30,8 +30,7 @@ Checks: >
-readability-qualified-auto,
-readability-simplify-boolean-expr,
-readability-static-definition-in-anonymous-namespace,
- -readability-suspicious-call-argument,
- -readability-use-anyofallof
+ -readability-suspicious-call-argument
CheckOptions:
- key: performance-move-const-arg.CheckTriviallyCopyableMove
diff --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
index 81a9f932e547d..a49492a5ac022 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
@@ -478,11 +478,10 @@ bool ClangTidyDiagnosticConsumer::passesLineFilter(StringRef FileName,
if (FileName.ends_with(Filter.Name)) {
if (Filter.LineRanges.empty())
return true;
- for (const FileFilter::LineRange &Range : Filter.LineRanges) {
- if (Range.first <= LineNumber && LineNumber <= Range.second)
- return true;
- }
- return false;
+ return llvm::any_of(
+ Filter.LineRanges, [&](const FileFilter::LineRange &Range) {
+ return Range.first <= LineNumber && LineNumber <= Range.second;
+ });
}
}
return false;
diff --git a/clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.cpp
index 07bb08166a006..e7848da8ea098 100644
--- a/clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/BranchCloneCheck.cpp
@@ -75,12 +75,9 @@ static bool isFallthroughSwitchBranch(const SwitchBranch &Branch) {
if (!S)
return true;
- for (const Attr *A : S->getAttrs()) {
- if (isa<FallThroughAttr>(A))
- return false;
- }
-
- return true;
+ return llvm::all_of(S->getAttrs(), [](const Attr *A) {
+ return !isa<FallThroughAttr>(A);
+ });
}
} Visitor;
diff --git a/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
index a376de505dd70..4fdb2bbef7194 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
@@ -48,14 +48,15 @@ AST_MATCHER(CXXRecordDecl, correctHandleCaptureThisLambda) {
if (C->isCopyOrMoveConstructor() && C->isDefaulted() && !C->isDeleted())
return false;
}
- for (const CXXMethodDecl *M : Node.methods()) {
- if (M->isCopyAssignmentOperator())
- llvm::errs() << M->isDeleted() << "\n";
- if (M->isCopyAssignmentOperator() && M->isDefaulted() && !M->isDeleted())
- return false;
- if (M->isMoveAssignmentOperator() && M->isDefaulted() && !M->isDeleted())
- return false;
- }
+ if (llvm::any_of(Node.methods(), [](const CXXMethodDecl *M) {
+ if (M->isCopyAssignmentOperator())
+ llvm::errs() << M->isDeleted() << "\n";
+ return (M->isCopyAssignmentOperator() && M->isDefaulted() &&
+ !M->isDeleted()) ||
+ (M->isMoveAssignmentOperator() && M->isDefaulted() &&
+ !M->isDeleted());
+ }))
+ return false;
// FIXME: find ways to identifier correct handle capture this lambda
return true;
}
diff --git a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
index b4ee35154f5f0..5e92179ec58f8 100644
--- a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
@@ -1589,11 +1589,9 @@ static bool lazyMapOfSetsIntersectionExists(const MapTy &Map, const ElemTy &E1,
if (E1Iterator == Map.end() || E2Iterator == Map.end())
return false;
- for (const auto &E1SetElem : E1Iterator->second)
- if (E2Iterator->second.contains(E1SetElem))
- return true;
-
- return false;
+ return llvm::any_of(E1Iterator->second, [&](const auto &E1SetElem) {
+ return E2Iterator->second.contains(E1SetElem);
+ });
}
/// Implements the heuristic that marks two parameters related if there is
diff --git a/clang-tools-extra/clang-tidy/bugprone/InfiniteLoopCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/InfiniteLoopCheck.cpp
index 1e516c1573219..b92738d988c1b 100644
--- a/clang-tools-extra/clang-tidy/bugprone/InfiniteLoopCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/InfiniteLoopCheck.cpp
@@ -119,14 +119,9 @@ static bool isAtLeastOneCondVarChanged(const Decl *Func, const Stmt *LoopStmt,
if (isVarThatIsPossiblyChanged(Func, LoopStmt, Cond, Context))
return true;
- for (const Stmt *Child : Cond->children()) {
- if (!Child)
- continue;
-
- if (isAtLeastOneCondVarChanged(Func, LoopStmt, Child, Context))
- return true;
- }
- return false;
+ return llvm::any_of(Cond->children(), [&](const Stmt *Child) {
+ return Child && isAtLeastOneCondVarChanged(Func, LoopStmt, Child, Context);
+ });
}
/// Return the variable names in `Cond`.
@@ -240,10 +235,9 @@ static bool hasStaticLocalVariable(const Stmt *Cond) {
return true;
}
- for (const Stmt *Child : Cond->children())
- if (Child && hasStaticLocalVariable(Child))
- return true;
- return false;
+ return llvm::any_of(Cond->children(), [](const Stmt *Child) {
+ return Child && hasStaticLocalVariable(Child);
+ });
}
/// Tests if the loop condition `Cond` involves static local variables and
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousReallocUsageCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SuspiciousReallocUsageCheck.cpp
index b5da8016f2cc8..ef1df7f30f74b 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousReallocUsageCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousReallocUsageCheck.cpp
@@ -92,10 +92,9 @@ class FindAssignToVarBefore
return false;
}
bool VisitStmt(const Stmt *S) {
- for (const Stmt *Child : S->children())
- if (Child && Visit(Child))
- return true;
- return false;
+ return llvm::any_of(S->children(), [this](const Stmt *Child) {
+ return Child && Visit(Child);
+ });
}
};
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
index d0f86526d1a29..69cf6134b413b 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
@@ -19,10 +19,10 @@ namespace clang::tidy::cppcoreguidelines {
namespace {
AST_MATCHER_P(CXXForRangeStmt, hasRangeBeginEndStmt,
ast_matchers::internal::Matcher<DeclStmt>, InnerMatcher) {
- for (const DeclStmt *Stmt : {Node.getBeginStmt(), Node.getEndStmt()})
- if (Stmt != nullptr && InnerMatcher.matches(*Stmt, Finder, Builder))
- return true;
- return false;
+ const DeclStmt *Stmts[] = {Node.getBeginStmt(), Node.getEndStmt()};
+ return llvm::any_of(Stmts, [&](const DeclStmt *Stmt) {
+ return Stmt != nullptr && InnerMatcher.matches(*Stmt, Finder, Builder);
+ });
}
AST_MATCHER(Stmt, isInsideOfRangeBeginEndStmt) {
diff --git a/clang-tools-extra/clang-tidy/fuchsia/VirtualInheritanceCheck.cpp b/clang-tools-extra/clang-tidy/fuchsia/VirtualInheritanceCheck.cpp
index b6fb22c66d374..9c98b4938844f 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/VirtualInheritanceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/VirtualInheritanceCheck.cpp
@@ -20,10 +20,9 @@ AST_MATCHER(CXXRecordDecl, hasDirectVirtualBaseClass) {
return false;
if (!Node.getNumVBases())
return false;
- for (const CXXBaseSpecifier &Base : Node.bases())
- if (Base.isVirtual())
- return true;
- return false;
+ return llvm::any_of(Node.bases(), [](const CXXBaseSpecifier &Base) {
+ return Base.isVirtual();
+ });
}
} // namespace
diff --git a/clang-tools-extra/clang-tidy/misc/NewDeleteOverloadsCheck.cpp b/clang-tools-extra/clang-tidy/misc/NewDeleteOverloadsCheck.cpp
index a44e9b381d982..9389463c5cfd3 100644
--- a/clang-tools-extra/clang-tidy/misc/NewDeleteOverloadsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/NewDeleteOverloadsCheck.cpp
@@ -114,17 +114,15 @@ hasCorrespondingOverloadInBaseClass(const CXXMethodDecl *MD,
RD = MD->getParent();
}
- for (const auto &BS : RD->bases()) {
+ return llvm::any_of(RD->bases(), [&](const auto &BS) {
// We can't say much about a dependent base class, but to avoid false
// positives assume it can have a corresponding overload.
if (BS.getType()->isDependentType())
return true;
if (const auto *BaseRD = BS.getType()->getAsCXXRecordDecl())
- if (hasCorrespondingOverloadInBaseClass(MD, BaseRD))
- return true;
- }
-
- return false;
+ return hasCorrespondingOverloadInBaseClass(MD, BaseRD);
+ return false;
+ });
}
void NewDeleteOverloadsCheck::registerMatchers(MatchFinder *Finder) {
diff --git a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
index ae080960b95bc..f26c1ac2d43c1 100644
--- a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
@@ -30,13 +30,10 @@ static bool isOverrideMethod(const FunctionDecl *Function) {
static bool hasAttrAfterParam(const SourceManager *SourceManager,
const ParmVarDecl *Param) {
- for (const auto *Attr : Param->attrs()) {
- if (SourceManager->isBeforeInTranslationUnit(Param->getLocation(),
- Attr->getLocation())) {
- return true;
- }
- }
- return false;
+ return llvm::any_of(Param->attrs(), [&](const auto *Attr) {
+ return SourceManager->isBeforeInTranslationUnit(Param->getLocation(),
+ Attr->getLocation());
+ });
}
void UnusedParametersCheck::registerMatchers(MatchFinder *Finder) {
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
index fea5ac6f29eff..2b7698f462d29 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
@@ -511,27 +511,24 @@ static bool canBeModified(ASTContext *Context, const Expr *E) {
/// Returns true when it can be guaranteed that the elements of the
/// container are not being modified.
static bool usagesAreConst(ASTContext *Context, const UsageResult &Usages) {
- for (const Usage &U : Usages) {
+ return llvm::all_of(Usages, [&](const Usage &U) {
// Lambda captures are just redeclarations (VarDecl) of the same variable,
// not expressions. If we want to know if a variable that is captured by
// reference can be modified in an usage inside the lambda's body, we need
// to find the expression corresponding to that particular usage, later in
// this loop.
- if (U.Kind != Usage::UK_CaptureByCopy && U.Kind != Usage::UK_CaptureByRef &&
- canBeModified(Context, U.Expression))
- return false;
- }
- return true;
+ return U.Kind == Usage::UK_CaptureByCopy ||
+ U.Kind == Usage::UK_CaptureByRef ||
+ !canBeModified(Context, U.Expression);
+ });
}
/// Returns true if the elements of the container are never accessed
/// by reference.
static bool usagesReturnRValues(const UsageResult &Usages) {
- for (const auto &U : Usages) {
- if (U.Expression && !U.Expression->isPRValue())
- return false;
- }
- return true;
+ return llvm::all_of(Usages, [](const auto &U) {
+ return !U.Expression || U.Expression->isPRValue();
+ });
}
/// Returns true if the container is const-qualified.
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
index 6fb780844f2b6..318e73885fa49 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
@@ -89,13 +89,10 @@ bool DependencyFinderASTVisitor::VisitVarDecl(VarDecl *V) {
// Next, check if the variable was removed from existence by an earlier
// iteration.
- for (const auto &I : *ReplacedVars) {
- if (I.second == V) {
- DependsOnInsideVariable = true;
- return false;
- }
- }
- return true;
+ if (llvm::all_of(*ReplacedVars, [&](const auto &I) { return I.second != V; }))
+ return true;
+ DependsOnInsideVariable = true;
+ return false;
}
/// If we already created a variable for TheLoop, check to make sure
@@ -233,11 +230,8 @@ static bool containsExpr(ASTContext *Context, const ContainerT *Container,
const Expr *E) {
llvm::FoldingSetNodeID ID;
E->Profile(ID, *Context, true);
- for (const auto &I : *Container) {
- if (ID == I.second)
- return true;
- }
- return false;
+ return llvm::any_of(*Container,
+ [&](const auto &I) { return ID == I.second; });
}
/// Returns true when the index expression is a declaration reference to
diff --git a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
index d5ccbb73735ec..27b925a259ce2 100644
--- a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
@@ -195,11 +195,7 @@ static bool hasRValueOverload(const CXXConstructorDecl *Ctor,
return true;
};
- for (const auto *Candidate : Record->ctors()) {
- if (IsRValueOverload(Candidate))
- return true;
- }
- return false;
+ return llvm::any_of(Record->ctors(), IsRValueOverload);
}
/// Find all references to \p ParamDecl across all of the
diff --git a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
index e585dd1d40002..841af1efaf1ee 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
@@ -44,17 +44,13 @@ AST_MATCHER_P(NamedDecl, hasAnyNameIgnoringTemplates, std::vector<StringRef>,
// clang/lib/ASTMatchers/ASTMatchersInternal.cpp and checks whether
// FullNameTrimmed matches any of the given Names.
const StringRef FullNameTrimmedRef = FullNameTrimmed;
- for (const StringRef Pattern : Names) {
+ return llvm::any_of(Names, [&](const StringRef Pattern) {
if (Pattern.starts_with("::")) {
- if (FullNameTrimmed == Pattern)
- return true;
- } else if (FullNameTrimmedRef.ends_with(Pattern) &&
- FullNameTrimmedRef.drop_back(Pattern.size()).ends_with("::")) {
- return true;
+ return FullNameTrimmed == Pattern;
}
- }
-
- return false;
+ return FullNameTrimmedRef.ends_with(Pattern) &&
+ FullNameTrimmedRef.drop_back(Pattern.size()).ends_with("::");
+ });
}
// Checks if the given matcher is the last argument of the given CallExpr.
diff --git a/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
index d623ec402179b..6f4b75d3c1bf7 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseTrailingReturnTypeCheck.cpp
@@ -55,13 +55,12 @@ struct UnqualNameVisitor : public RecursiveASTVisitor<UnqualNameVisitor> {
bool visitUnqualName(StringRef UnqualName) {
// Check for collisions with function arguments.
- for (ParmVarDecl *Param : F.parameters())
+ Collision = llvm::any_of(F.parameters(), [&](ParmVarDecl *Param) {
if (const IdentifierInfo *Ident = Param->getIdentifier())
- if (Ident->getName() == UnqualName) {
- Collision = true;
- return true;
- }
- return false;
+ return Ident->getName() == UnqualName;
+ return false;
+ });
+ return Collision;
}
bool TraverseTypeLoc(TypeLoc TL, bool TraverseQualifier = true) {
diff --git a/clang-tools-extra/clang-tidy/objc/MissingHashCheck.cpp b/clang-tools-extra/clang-tidy/objc/MissingHashCheck.cpp
index 7b48fd9f77bca..cee4ac30d874d 100644
--- a/clang-tools-extra/clang-tidy/objc/MissingHashCheck.cpp
+++ b/clang-tools-extra/clang-tidy/objc/MissingHashCheck.cpp
@@ -25,11 +25,9 @@ AST_MATCHER_P(ObjCImplementationDecl, hasInterface,
AST_MATCHER_P(ObjCContainerDecl, hasInstanceMethod,
ast_matchers::internal::Matcher<ObjCMethodDecl>, Base) {
// Check each instance method against the provided matcher.
- for (const auto *I : Node.instance_methods()) {
- if (Base.matches(*I, Finder, Builder))
- return true;
- }
- return false;
+ return llvm::any_of(Node.instance_methods(), [&](const auto *I) {
+ return Base.matches(*I, Finder, Builder);
+ });
}
} // namespace
diff --git a/clang-tools-extra/clang-tidy/performance/TriviallyDestructibleCheck.cpp b/clang-tools-extra/clang-tidy/performance/TriviallyDestructibleCheck.cpp
index 2f54b17367b06..416c41d7acd66 100644
--- a/clang-tools-extra/clang-tidy/performance/TriviallyDestructibleCheck.cpp
+++ b/clang-tools-extra/clang-tidy/performance/TriviallyDestructibleCheck.cpp
@@ -23,12 +23,9 @@ namespace {
AST_MATCHER(Decl, isFirstDecl) { return Node.isFirstDecl(); }
AST_MATCHER_P(CXXRecordDecl, hasBase, Matcher<QualType>, InnerMatcher) {
- for (const CXXBaseSpecifier &BaseSpec : Node.bases()) {
- const QualType BaseType = BaseSpec.getType();
- if (InnerMatcher.matches(BaseType, Finder, Builder))
- return true;
- }
- return false;
+ return llvm::any_of(Node.bases(), [&](const CXXBaseSpecifier &BaseSpec) {
+ return InnerMatcher.matches(BaseSpec.getType(), Finder, Builder);
+ });
}
} // namespace
diff --git a/clang-tools-extra/clang-tidy/readability/AmbiguousSmartptrResetCallCheck.cpp b/clang-tools-extra/clang-tidy/readability/AmbiguousSmartptrResetCallCheck.cpp
index 22ff5ce1545a5..051963a17deed 100644
--- a/clang-tools-extra/clang-tidy/readability/AmbiguousSmartptrResetCallCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/AmbiguousSmartptrResetCallCheck.cpp
@@ -20,12 +20,8 @@ namespace clang::tidy::readability {
namespace {
AST_MATCHER(CXXMethodDecl, hasOnlyDefaultParameters) {
- for (const auto *Param : Node.parameters()) {
- if (!Param->hasDefaultArg())
- return false;
- }
-
- return true;
+ return llvm::all_of(Node.parameters(),
+ [](const auto *Param) { return Param->hasDefaultArg(); });
}
const auto DefaultSmartPointers = "::std::shared_ptr;::std::unique_ptr;"
diff --git a/clang-tools-extra/clang-tidy/readability/OperatorsRepresentationCheck.cpp b/clang-tools-extra/clang-tidy/readability/OperatorsRepresentationCheck.cpp
index 196fb31bd4b7a..07342d93ec4c5 100644
--- a/clang-tools-extra/clang-tidy/readability/OperatorsRepresentationCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/OperatorsRepresentationCheck.cpp
@@ -136,11 +136,9 @@ getRepresentation(const std::vector<llvm::StringRef> &Config,
template <typename T>
static bool isAnyOperatorEnabled(const std::vector<llvm::StringRef> &Config,
const T &Operators) {
- for (const auto &[traditional, alternative] : Operators) {
- if (!getRepresentation(Config, traditional, alternative).empty())
- return true;
- }
- return false;
+ return llvm::any_of(Operators, [&](const auto &Op) {
+ return !getRepresentation(Config, Op.first, Op.second).empty();
+ });
}
OperatorsRepresentationCheck::OperatorsRepresentationCheck(
diff --git a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
index feb248dd62411..abf1092bd5cae 100644
--- a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
@@ -759,7 +759,7 @@ bool SuspiciousCallArgumentCheck::areParamAndArgComparable(
bool SuspiciousCallArgumentCheck::areArgsSwapped(std::size_t Position1,
std::size_t Position2) const {
- for (Heuristic H : AppliedHeuristics) {
+ return llvm::any_of(AppliedHeuristics, [&](Heuristic H) {
bool A1ToP2Similar = areNamesSimilar(
ArgNames[Position2], ParamNames[Position1], H, BoundKind::SimilarAbove);
bool A2ToP1Similar = areNamesSimilar(
@@ -772,11 +772,9 @@ bool SuspiciousCallArgumentCheck::areArgsSwapped(std::size_t Position1,
!areNamesSimilar(ArgNames[Position2], ParamNames[Position2], H,
BoundKind::DissimilarBelow);
- if ((A1ToP2Similar || A2ToP1Similar) && A1ToP1Dissimilar &&
- A2ToP2Dissimilar)
- return true;
- }
- return false;
+ return (A1ToP2Similar || A2ToP1Similar) && A1ToP1Dissimilar &&
+ A2ToP2Dissimilar;
+ });
}
bool SuspiciousCallArgumentCheck::areNamesSimilar(StringRef Arg,
diff --git a/clang-tools-extra/clang-tidy/utils/Aliasing.cpp b/clang-tools-extra/clang-tidy/utils/Aliasing.cpp
index a22d2358bc560..1b12859c7e450 100644
--- a/clang-tools-extra/clang-tidy/utils/Aliasing.cpp
+++ b/clang-tools-extra/clang-tidy/utils/Aliasing.cpp
@@ -65,15 +65,9 @@ static bool hasPtrOrReferenceInStmt(const Stmt *S, const ValueDecl *Var) {
if (isPtrOrReferenceForVar(S, Var))
return true;
- for (const Stmt *Child : S->children()) {
- if (!Child)
- continue;
-
- if (hasPtrOrReferenceInStmt(Child, Var))
- return true;
- }
-
- return false;
+ return llvm::any_of(S->children(), [&](const Stmt *Child) {
+ return Child && hasPtrOrReferenceInStmt(Child, Var);
+ });
}
static bool refersToEnclosingLambdaCaptureByRef(const Decl *Func,
diff --git a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
index 75a6dafed3c5e..a67b2706f70f2 100644
--- a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
+++ b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
@@ -21,10 +21,7 @@ using llvm::SmallPtrSet;
template <typename S>
static bool isSetDifferenceEmpty(const S &S1, const S &S2) {
- for (auto E : S1)
- if (S2.count(E) == 0)
- return false;
- return true;
+ return llvm::all_of(S1, [&](auto E) { return S2.count(E) != 0; });
}
// Extracts all Nodes keyed by ID from Matches and inserts them into Nodes.
diff --git a/clang-tools-extra/clang-tidy/utils/ExprSequence.cpp b/clang-tools-extra/clang-tidy/utils/ExprSequence.cpp
index 0375d0f6c740f..45fcacf584157 100644
--- a/clang-tools-extra/clang-tidy/utils/ExprSequence.cpp
+++ b/clang-tools-extra/clang-tidy/utils/ExprSequence.cpp
@@ -148,12 +148,9 @@ bool ExprSequence::inSequence(const Stmt *Before, const Stmt *After) const {
// If 'After' is a parent of 'Before' or is sequenced after one of these
// parents, we know that it is sequenced after 'Before'.
- for (const Stmt *Parent : BeforeParents) {
- if (Parent == After || inSequence(Parent, After))
- return true;
- }
-
- return false;
+ return llvm::any_of(BeforeParents, [&](const Stmt *Parent) {
+ return Parent == After || inSequence(Parent, After);
+ });
}
bool ExprSequence::potentiallyAfter(const Stmt *After,
diff --git a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
index 98a5d40d49313..5352b043c355a 100644
--- a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
+++ b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
@@ -24,11 +24,9 @@ static bool hasDeletedCopyConstructor(QualType Type) {
auto *Record = Type->getAsCXXRecordDecl();
if (!Record || !Record->hasDefinition())
return false;
- for (const auto *Constructor : Record->ctors()) {
- if (Constructor->isCopyConstructor() && Constructor->isDeleted())
- return true;
- }
- return false;
+ return llvm::any_of(Record->ctors(), [](const auto *Constructor) {
+ return Constructor->isCopyConstructor() && Constructor->isDeleted();
+ });
}
std::optional<bool> isExpensiveToCopy(QualType Type,
@@ -70,12 +68,11 @@ bool recordIsTriviallyDefaultConstructible(const RecordDecl &RecordDecl,
return false;
}
// If all its direct bases are trivially constructible.
- for (const CXXBaseSpecifier &Base : ClassDecl->bases()) {
- if (!isTriviallyDefaultConstructible(Base.getType(), Context))
- return false;
- if (Base.isVirtual())
- return false;
- }
+ if (!llvm::all_of(ClassDecl->bases(), [&](const CXXBaseSpecifier &Base) {
+ return isTriviallyDefaultConstructible(Base.getType(), Context) &&
+ !Base.isVirtual();
+ }))
+ return false;
return true;
}
>From c48920c0f548b90c9dd16d0ede0641aac3aed7e1 Mon Sep 17 00:00:00 2001
From: Victor Baranov <bar.victor.2002 at gmail.com>
Date: Mon, 10 Nov 2025 23:44:00 +0300
Subject: [PATCH 2/2] major fixes
---
.../CapturingThisInMemberVariableCheck.cpp | 18 ++++++++----------
.../EasilySwappableParametersCheck.cpp | 2 +-
.../ProBoundsArrayToPointerDecayCheck.cpp | 9 +++++----
.../misc/NewDeleteOverloadsCheck.cpp | 4 ++--
.../clang-tidy/misc/UnusedParametersCheck.cpp | 2 +-
.../clang-tidy/modernize/LoopConvertCheck.cpp | 10 +++++-----
.../clang-tidy/modernize/LoopConvertUtils.cpp | 3 ++-
.../clang-tidy/modernize/UseEmplaceCheck.cpp | 3 +--
.../clang-tidy/objc/MissingHashCheck.cpp | 2 +-
.../AmbiguousSmartptrResetCallCheck.cpp | 5 +++--
.../SuspiciousCallArgumentCheck.cpp | 2 +-
.../clang-tidy/utils/DeclRefExprUtils.cpp | 2 +-
.../clang-tidy/utils/TypeTraits.cpp | 11 ++++-------
13 files changed, 35 insertions(+), 38 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
index 4fdb2bbef7194..6aed454813a22 100644
--- a/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
@@ -44,17 +44,15 @@ AST_MATCHER(CXXRecordDecl, correctHandleCaptureThisLambda) {
if (Node.hasSimpleMoveAssignment())
return false;
- for (const CXXConstructorDecl *C : Node.ctors()) {
- if (C->isCopyOrMoveConstructor() && C->isDefaulted() && !C->isDeleted())
- return false;
- }
+ if (llvm::any_of(Node.ctors(), [](const CXXConstructorDecl *C) {
+ return C->isCopyOrMoveConstructor() && C->isDefaulted() &&
+ !C->isDeleted();
+ }))
+ return false;
if (llvm::any_of(Node.methods(), [](const CXXMethodDecl *M) {
- if (M->isCopyAssignmentOperator())
- llvm::errs() << M->isDeleted() << "\n";
- return (M->isCopyAssignmentOperator() && M->isDefaulted() &&
- !M->isDeleted()) ||
- (M->isMoveAssignmentOperator() && M->isDefaulted() &&
- !M->isDeleted());
+ return (M->isCopyAssignmentOperator() ||
+ M->isMoveAssignmentOperator()) &&
+ M->isDefaulted() && !M->isDeleted();
}))
return false;
// FIXME: find ways to identifier correct handle capture this lambda
diff --git a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
index 5e92179ec58f8..8545ec605ae06 100644
--- a/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/EasilySwappableParametersCheck.cpp
@@ -1589,7 +1589,7 @@ static bool lazyMapOfSetsIntersectionExists(const MapTy &Map, const ElemTy &E1,
if (E1Iterator == Map.end() || E2Iterator == Map.end())
return false;
- return llvm::any_of(E1Iterator->second, [&](const auto &E1SetElem) {
+ return llvm::any_of(E1Iterator->second, [&E2Iterator](const auto &E1SetElem) {
return E2Iterator->second.contains(E1SetElem);
});
}
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
index 69cf6134b413b..1c5c854cb4d84 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsArrayToPointerDecayCheck.cpp
@@ -19,10 +19,11 @@ namespace clang::tidy::cppcoreguidelines {
namespace {
AST_MATCHER_P(CXXForRangeStmt, hasRangeBeginEndStmt,
ast_matchers::internal::Matcher<DeclStmt>, InnerMatcher) {
- const DeclStmt *Stmts[] = {Node.getBeginStmt(), Node.getEndStmt()};
- return llvm::any_of(Stmts, [&](const DeclStmt *Stmt) {
- return Stmt != nullptr && InnerMatcher.matches(*Stmt, Finder, Builder);
- });
+ return llvm::any_of(llvm::ArrayRef{Node.getBeginStmt(), Node.getEndStmt()},
+ [&](const DeclStmt *Stmt) {
+ return Stmt &&
+ InnerMatcher.matches(*Stmt, Finder, Builder);
+ });
}
AST_MATCHER(Stmt, isInsideOfRangeBeginEndStmt) {
diff --git a/clang-tools-extra/clang-tidy/misc/NewDeleteOverloadsCheck.cpp b/clang-tools-extra/clang-tidy/misc/NewDeleteOverloadsCheck.cpp
index 9389463c5cfd3..0471ba8ae291d 100644
--- a/clang-tools-extra/clang-tidy/misc/NewDeleteOverloadsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/NewDeleteOverloadsCheck.cpp
@@ -114,12 +114,12 @@ hasCorrespondingOverloadInBaseClass(const CXXMethodDecl *MD,
RD = MD->getParent();
}
- return llvm::any_of(RD->bases(), [&](const auto &BS) {
+ return llvm::any_of(RD->bases(), [&](const CXXBaseSpecifier &BS) {
// We can't say much about a dependent base class, but to avoid false
// positives assume it can have a corresponding overload.
if (BS.getType()->isDependentType())
return true;
- if (const auto *BaseRD = BS.getType()->getAsCXXRecordDecl())
+ if (const CXXRecordDecl *BaseRD = BS.getType()->getAsCXXRecordDecl())
return hasCorrespondingOverloadInBaseClass(MD, BaseRD);
return false;
});
diff --git a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
index f26c1ac2d43c1..e66a9b7857b5e 100644
--- a/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnusedParametersCheck.cpp
@@ -30,7 +30,7 @@ static bool isOverrideMethod(const FunctionDecl *Function) {
static bool hasAttrAfterParam(const SourceManager *SourceManager,
const ParmVarDecl *Param) {
- return llvm::any_of(Param->attrs(), [&](const auto *Attr) {
+ return llvm::any_of(Param->attrs(), [&](const Attr *Attr) {
return SourceManager->isBeforeInTranslationUnit(Param->getLocation(),
Attr->getLocation());
});
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
index 2b7698f462d29..685e6000170b0 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
@@ -511,22 +511,22 @@ static bool canBeModified(ASTContext *Context, const Expr *E) {
/// Returns true when it can be guaranteed that the elements of the
/// container are not being modified.
static bool usagesAreConst(ASTContext *Context, const UsageResult &Usages) {
- return llvm::all_of(Usages, [&](const Usage &U) {
+ return llvm::none_of(Usages, [&Context](const Usage &U) {
// Lambda captures are just redeclarations (VarDecl) of the same variable,
// not expressions. If we want to know if a variable that is captured by
// reference can be modified in an usage inside the lambda's body, we need
// to find the expression corresponding to that particular usage, later in
// this loop.
- return U.Kind == Usage::UK_CaptureByCopy ||
- U.Kind == Usage::UK_CaptureByRef ||
- !canBeModified(Context, U.Expression);
+ return U.Kind != Usage::UK_CaptureByCopy &&
+ U.Kind != Usage::UK_CaptureByRef &&
+ canBeModified(Context, U.Expression);
});
}
/// Returns true if the elements of the container are never accessed
/// by reference.
static bool usagesReturnRValues(const UsageResult &Usages) {
- return llvm::all_of(Usages, [](const auto &U) {
+ return llvm::all_of(Usages, [](const Usage &U) {
return !U.Expression || U.Expression->isPRValue();
});
}
diff --git a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
index 318e73885fa49..701e30f4d7a50 100644
--- a/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.cpp
@@ -89,7 +89,8 @@ bool DependencyFinderASTVisitor::VisitVarDecl(VarDecl *V) {
// Next, check if the variable was removed from existence by an earlier
// iteration.
- if (llvm::all_of(*ReplacedVars, [&](const auto &I) { return I.second != V; }))
+ if (llvm::none_of(*ReplacedVars,
+ [&](const auto &I) { return I.second == V; }))
return true;
DependsOnInsideVariable = true;
return false;
diff --git a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
index 841af1efaf1ee..ca97b11b9990b 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
@@ -45,9 +45,8 @@ AST_MATCHER_P(NamedDecl, hasAnyNameIgnoringTemplates, std::vector<StringRef>,
// FullNameTrimmed matches any of the given Names.
const StringRef FullNameTrimmedRef = FullNameTrimmed;
return llvm::any_of(Names, [&](const StringRef Pattern) {
- if (Pattern.starts_with("::")) {
+ if (Pattern.starts_with("::"))
return FullNameTrimmed == Pattern;
- }
return FullNameTrimmedRef.ends_with(Pattern) &&
FullNameTrimmedRef.drop_back(Pattern.size()).ends_with("::");
});
diff --git a/clang-tools-extra/clang-tidy/objc/MissingHashCheck.cpp b/clang-tools-extra/clang-tidy/objc/MissingHashCheck.cpp
index cee4ac30d874d..b8010e0d29eb5 100644
--- a/clang-tools-extra/clang-tidy/objc/MissingHashCheck.cpp
+++ b/clang-tools-extra/clang-tidy/objc/MissingHashCheck.cpp
@@ -25,7 +25,7 @@ AST_MATCHER_P(ObjCImplementationDecl, hasInterface,
AST_MATCHER_P(ObjCContainerDecl, hasInstanceMethod,
ast_matchers::internal::Matcher<ObjCMethodDecl>, Base) {
// Check each instance method against the provided matcher.
- return llvm::any_of(Node.instance_methods(), [&](const auto *I) {
+ return llvm::any_of(Node.instance_methods(), [&](const ObjCMethodDecl *I) {
return Base.matches(*I, Finder, Builder);
});
}
diff --git a/clang-tools-extra/clang-tidy/readability/AmbiguousSmartptrResetCallCheck.cpp b/clang-tools-extra/clang-tidy/readability/AmbiguousSmartptrResetCallCheck.cpp
index 051963a17deed..ef9263beebfdd 100644
--- a/clang-tools-extra/clang-tidy/readability/AmbiguousSmartptrResetCallCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/AmbiguousSmartptrResetCallCheck.cpp
@@ -20,8 +20,9 @@ namespace clang::tidy::readability {
namespace {
AST_MATCHER(CXXMethodDecl, hasOnlyDefaultParameters) {
- return llvm::all_of(Node.parameters(),
- [](const auto *Param) { return Param->hasDefaultArg(); });
+ return llvm::all_of(Node.parameters(), [](const ParmVarDecl *Param) {
+ return Param->hasDefaultArg();
+ });
}
const auto DefaultSmartPointers = "::std::shared_ptr;::std::unique_ptr;"
diff --git a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
index abf1092bd5cae..fb6cd129af6a7 100644
--- a/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/SuspiciousCallArgumentCheck.cpp
@@ -759,7 +759,7 @@ bool SuspiciousCallArgumentCheck::areParamAndArgComparable(
bool SuspiciousCallArgumentCheck::areArgsSwapped(std::size_t Position1,
std::size_t Position2) const {
- return llvm::any_of(AppliedHeuristics, [&](Heuristic H) {
+ return llvm::any_of(AppliedHeuristics, [&](const Heuristic &H) {
bool A1ToP2Similar = areNamesSimilar(
ArgNames[Position2], ParamNames[Position1], H, BoundKind::SimilarAbove);
bool A2ToP1Similar = areNamesSimilar(
diff --git a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
index a67b2706f70f2..a807c951a0e98 100644
--- a/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
+++ b/clang-tools-extra/clang-tidy/utils/DeclRefExprUtils.cpp
@@ -21,7 +21,7 @@ using llvm::SmallPtrSet;
template <typename S>
static bool isSetDifferenceEmpty(const S &S1, const S &S2) {
- return llvm::all_of(S1, [&](auto E) { return S2.count(E) != 0; });
+ return llvm::none_of(S1, [&S2](const auto &E) { return !S2.contains(E); });
}
// Extracts all Nodes keyed by ID from Matches and inserts them into Nodes.
diff --git a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
index 5352b043c355a..dde6e9a8dca70 100644
--- a/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
+++ b/clang-tools-extra/clang-tidy/utils/TypeTraits.cpp
@@ -68,13 +68,10 @@ bool recordIsTriviallyDefaultConstructible(const RecordDecl &RecordDecl,
return false;
}
// If all its direct bases are trivially constructible.
- if (!llvm::all_of(ClassDecl->bases(), [&](const CXXBaseSpecifier &Base) {
- return isTriviallyDefaultConstructible(Base.getType(), Context) &&
- !Base.isVirtual();
- }))
- return false;
-
- return true;
+ return llvm::all_of(ClassDecl->bases(), [&](const CXXBaseSpecifier &Base) {
+ return isTriviallyDefaultConstructible(Base.getType(), Context) &&
+ !Base.isVirtual();
+ });
}
// Based on QualType::isTrivial.
More information about the cfe-commits
mailing list