https://github.com/zeyi2 updated https://github.com/llvm/llvm-project/pull/185791
>From 917bcd4fbc5f0b3cb22930b6c57f54390568b80f Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Tue, 10 Mar 2026 23:27:57 +0800 Subject: [PATCH 1/5] [clang-tidy] Avoid use-anyofallof diagnostics on temporary ranges before C++20 --- .../readability/UseAnyOfAllOfCheck.cpp | 15 ++++++++ clang-tools-extra/docs/ReleaseNotes.rst | 4 +++ .../readability/use-anyofallof-cpp20.cpp | 20 +++++++++++ .../checkers/readability/use-anyofallof.cpp | 35 +++++++++++++++++++ 4 files changed, 74 insertions(+) diff --git a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp index 63649150b17e3..28be6b2891025 100644 --- a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp @@ -84,11 +84,22 @@ static bool isViableLoop(const CXXForRangeStmt &S, ASTContext &Context) { }); } +static bool isIteratingOverTemporary(const Expr *Init) { + if (const auto *EWC = dyn_cast<ExprWithCleanups>(Init)) + Init = EWC->getSubExpr(); + Init = Init->IgnoreParenImpCasts(); + return isa<MaterializeTemporaryExpr>(Init) || Init->isPRValue(); +} + void UseAnyOfAllOfCheck::check(const MatchFinder::MatchResult &Result) { if (const auto *S = Result.Nodes.getNodeAs<CXXForRangeStmt>("any_of_loop")) { if (!isViableLoop(*S, *Result.Context)) return; + if (!getLangOpts().CPlusPlus20 && + isIteratingOverTemporary(S->getRangeInit())) + return; + diag(S->getForLoc(), "replace loop by 'std%select{|::ranges}0::any_of()'") << getLangOpts().CPlusPlus20; } else if (const auto *S = @@ -96,6 +107,10 @@ void UseAnyOfAllOfCheck::check(const MatchFinder::MatchResult &Result) { if (!isViableLoop(*S, *Result.Context)) return; + if (!getLangOpts().CPlusPlus20 && + isIteratingOverTemporary(S->getRangeInit())) + return; + diag(S->getForLoc(), "replace loop by 'std%select{|::ranges}0::all_of()'") << getLangOpts().CPlusPlus20; } diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 66290bc80f754..90f95e3b24a71 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -336,6 +336,10 @@ Changes in existing checks <clang-tidy/checks/readability/suspicious-call-argument>` check by avoiding a crash from invalid ``Abbreviations`` option. +- Improved :doc:`readability-use-anyofallof + <clang-tidy/checks/readability/use-anyofallof>` check by avoiding false + positives in pre-C++20 mode when iterating over temporary range expressions. + Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp index c13ae002ae5b6..83f51995ece5f 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp @@ -1,5 +1,7 @@ // RUN: %check_clang_tidy -std=c++20-or-later %s readability-use-anyofallof %t +#include <vector> + bool good_any_of() { int v[] = {1, 2, 3}; // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::ranges::any_of()' @@ -17,3 +19,21 @@ bool good_all_of() { return false; return true; } + +std::vector<int> get_dummy_vec(); + +bool good_any_of_temporary_vector() { + // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::ranges::any_of()' + for (int i : get_dummy_vec()) + if (i) + return true; + return false; +} + +bool good_all_of_temporary_vector() { + // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::ranges::all_of()' + for (int i : get_dummy_vec()) + if (i) + return false; + return true; +} diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp index 7f8f16488d37a..e6f8830686ef3 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp @@ -1,6 +1,9 @@ // RUN: %check_clang_tidy -std=c++14,c++17 %s readability-use-anyofallof %t -- -- -fexceptions // FIXME: Fix the checker to work in C++20 mode. +#include <utility> +#include <vector> + bool good_any_of() { int v[] = {1, 2, 3}; // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::any_of()' [readability-use-anyofallof] @@ -182,3 +185,35 @@ bool good_all_of() { return false; return true; } + +std::vector<int> get_dummy_vec(); + +bool good_any_of_temporary_vector() { + for (int i : get_dummy_vec()) + if (i) + return true; + return false; +} + +bool good_all_of_temporary_vector() { + for (int i : get_dummy_vec()) + if (i) + return false; + return true; +} + +bool good_xvalue(std::vector<int>& v) { + // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::any_of()' [readability-use-anyofallof] + for (int i : std::move(v)) + if (i) + return true; + return false; +} + +bool good_xvalue_all_of(std::vector<int>& v) { + // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::all_of()' [readability-use-anyofallof] + for (int i : std::move(v)) + if (i) + return false; + return true; +} >From fa0b249769caa1cf3e92d24974318aaddef2bada Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Wed, 11 Mar 2026 14:22:52 +0800 Subject: [PATCH 2/5] better? --- .../readability/UseAnyOfAllOfCheck.cpp | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp index 28be6b2891025..c4b94399d2345 100644 --- a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp @@ -35,6 +35,15 @@ AST_MATCHER_P(Stmt, nextStmt, ast_matchers::internal::Matcher<Stmt>, return InnerMatcher.matches(**I, Finder, Builder); } + +/// Matches range-based loops over temporary range expressions. +AST_MATCHER(Expr, isTemporary) { + const Expr *E = &Node; + if (const auto *EWC = dyn_cast<ExprWithCleanups>(E)) + E = EWC->getSubExpr(); + E = E->IgnoreParenImpCasts(); + return isa<MaterializeTemporaryExpr>(E) || E->isPRValue(); +} } // namespace namespace tidy::readability { @@ -44,13 +53,17 @@ void UseAnyOfAllOfCheck::registerMatchers(MatchFinder *Finder) { return returnStmt(hasReturnValue(cxxBoolLiteral(equals(V)))); }; - auto ReturnsButNotTrue = + const auto ReturnsButNotTrue = returnStmt(hasReturnValue(unless(cxxBoolLiteral(equals(true))))); - auto ReturnsButNotFalse = + const auto ReturnsButNotFalse = returnStmt(hasReturnValue(unless(cxxBoolLiteral(equals(false))))); + const auto RangeInitMatcher = + getLangOpts().CPlusPlus20 ? expr() : expr(unless(isTemporary())); + Finder->addMatcher( cxxForRangeStmt( + hasRangeInit(RangeInitMatcher), nextStmt(Returns(false).bind("final_return")), hasBody(allOf(hasDescendant(Returns(true)), unless(anyOf(hasDescendant(breakStmt()), @@ -61,6 +74,7 @@ void UseAnyOfAllOfCheck::registerMatchers(MatchFinder *Finder) { Finder->addMatcher( cxxForRangeStmt( + hasRangeInit(RangeInitMatcher), nextStmt(Returns(true).bind("final_return")), hasBody(allOf(hasDescendant(Returns(false)), unless(anyOf(hasDescendant(breakStmt()), @@ -84,22 +98,11 @@ static bool isViableLoop(const CXXForRangeStmt &S, ASTContext &Context) { }); } -static bool isIteratingOverTemporary(const Expr *Init) { - if (const auto *EWC = dyn_cast<ExprWithCleanups>(Init)) - Init = EWC->getSubExpr(); - Init = Init->IgnoreParenImpCasts(); - return isa<MaterializeTemporaryExpr>(Init) || Init->isPRValue(); -} - void UseAnyOfAllOfCheck::check(const MatchFinder::MatchResult &Result) { if (const auto *S = Result.Nodes.getNodeAs<CXXForRangeStmt>("any_of_loop")) { if (!isViableLoop(*S, *Result.Context)) return; - if (!getLangOpts().CPlusPlus20 && - isIteratingOverTemporary(S->getRangeInit())) - return; - diag(S->getForLoc(), "replace loop by 'std%select{|::ranges}0::any_of()'") << getLangOpts().CPlusPlus20; } else if (const auto *S = @@ -107,10 +110,6 @@ void UseAnyOfAllOfCheck::check(const MatchFinder::MatchResult &Result) { if (!isViableLoop(*S, *Result.Context)) return; - if (!getLangOpts().CPlusPlus20 && - isIteratingOverTemporary(S->getRangeInit())) - return; - diag(S->getForLoc(), "replace loop by 'std%select{|::ranges}0::all_of()'") << getLangOpts().CPlusPlus20; } >From 739565d19756b9f7a886e224130fe18a0589ff70 Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Wed, 11 Mar 2026 21:16:18 +0800 Subject: [PATCH 3/5] fixup fixup --- .../readability/UseAnyOfAllOfCheck.cpp | 16 ++++------ .../readability/use-anyofallof-cpp20.cpp | 31 +++++++++++++++++++ .../checkers/readability/use-anyofallof.cpp | 16 +++++++++- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp index c4b94399d2345..a5f4fa17f14fc 100644 --- a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp @@ -36,13 +36,11 @@ AST_MATCHER_P(Stmt, nextStmt, ast_matchers::internal::Matcher<Stmt>, return InnerMatcher.matches(**I, Finder, Builder); } -/// Matches range-based loops over temporary range expressions. -AST_MATCHER(Expr, isTemporary) { - const Expr *E = &Node; - if (const auto *EWC = dyn_cast<ExprWithCleanups>(E)) - E = EWC->getSubExpr(); - E = E->IgnoreParenImpCasts(); - return isa<MaterializeTemporaryExpr>(E) || E->isPRValue(); +AST_MATCHER(Expr, isUnsupportedRangeInit) { + const Expr *E = Node.IgnoreParenImpCasts(); + if (Finder->getASTContext().getLangOpts().CPlusPlus20) + return isa<CXXStdInitializerListExpr>(E); + return E->isPRValue(); } } // namespace @@ -57,9 +55,7 @@ void UseAnyOfAllOfCheck::registerMatchers(MatchFinder *Finder) { returnStmt(hasReturnValue(unless(cxxBoolLiteral(equals(true))))); const auto ReturnsButNotFalse = returnStmt(hasReturnValue(unless(cxxBoolLiteral(equals(false))))); - - const auto RangeInitMatcher = - getLangOpts().CPlusPlus20 ? expr() : expr(unless(isTemporary())); + const auto RangeInitMatcher = expr(unless(isUnsupportedRangeInit())); Finder->addMatcher( cxxForRangeStmt( diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp index 83f51995ece5f..dcce49029cb23 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp @@ -1,6 +1,7 @@ // RUN: %check_clang_tidy -std=c++20-or-later %s readability-use-anyofallof %t #include <vector> +#include <initializer_list> bool good_any_of() { int v[] = {1, 2, 3}; @@ -37,3 +38,33 @@ bool good_all_of_temporary_vector() { return false; return true; } + +bool any_of_initializer_list(int a, int b, int c) { + for (const auto i : {a, b, c}) + if (i == 0) + return true; + return false; +} + +bool all_of_initializer_list(int a, int b, int c) { + for (const auto i : {a, b, c}) + if (i == 0) + return false; + return true; +} + +bool good_any_of_explicit_initializer_list(int a, int b, int c) { + // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::ranges::any_of()' + for (const auto i : std::initializer_list<int>{a, b, c}) + if (i == 0) + return true; + return false; +} + +bool good_all_of_explicit_initializer_list(int a, int b, int c) { + // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::ranges::all_of()' + for (const auto i : std::initializer_list<int>{a, b, c}) + if (i == 0) + return false; + return true; +} diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp index e6f8830686ef3..1529cc9be2881 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp @@ -195,13 +195,27 @@ bool good_any_of_temporary_vector() { return false; } -bool good_all_of_temporary_vector() { +bool all_of_temporary_vector() { for (int i : get_dummy_vec()) if (i) return false; return true; } +bool any_of_initializer_list(int a, int b, int c) { + for (const auto i : {a, b, c}) + if (i == 0) + return true; + return false; +} + +bool all_of_initializer_list(int a, int b, int c) { + for (const auto i : {a, b, c}) + if (i == 0) + return false; + return true; +} + bool good_xvalue(std::vector<int>& v) { // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 'std::any_of()' [readability-use-anyofallof] for (int i : std::move(v)) >From 0ca44c3e512b0283c74643d138b887ada83beb39 Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Tue, 17 Mar 2026 09:19:05 +0800 Subject: [PATCH 4/5] fixup --- .../readability/UseAnyOfAllOfCheck.cpp | 36 +++++++++++-------- clang-tools-extra/docs/ReleaseNotes.rst | 5 +-- .../readability/use-anyofallof-cpp20.cpp | 4 +++ .../checkers/readability/use-anyofallof.cpp | 8 +++++ 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp index a5f4fa17f14fc..1b08ce7ae0ead 100644 --- a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp @@ -36,7 +36,7 @@ AST_MATCHER_P(Stmt, nextStmt, ast_matchers::internal::Matcher<Stmt>, return InnerMatcher.matches(**I, Finder, Builder); } -AST_MATCHER(Expr, isUnsupportedRangeInit) { +AST_MATCHER(Expr, isUnsafeTemporaryRangeInit) { const Expr *E = Node.IgnoreParenImpCasts(); if (Finder->getASTContext().getLangOpts().CPlusPlus20) return isa<CXXStdInitializerListExpr>(E); @@ -55,7 +55,8 @@ void UseAnyOfAllOfCheck::registerMatchers(MatchFinder *Finder) { returnStmt(hasReturnValue(unless(cxxBoolLiteral(equals(true))))); const auto ReturnsButNotFalse = returnStmt(hasReturnValue(unless(cxxBoolLiteral(equals(false))))); - const auto RangeInitMatcher = expr(unless(isUnsupportedRangeInit())); + const auto RangeInitMatcher = anyOf( + expr(isUnsafeTemporaryRangeInit()).bind("unsafe_range_init"), expr()); Finder->addMatcher( cxxForRangeStmt( @@ -95,19 +96,24 @@ static bool isViableLoop(const CXXForRangeStmt &S, ASTContext &Context) { } void UseAnyOfAllOfCheck::check(const MatchFinder::MatchResult &Result) { - if (const auto *S = Result.Nodes.getNodeAs<CXXForRangeStmt>("any_of_loop")) { - if (!isViableLoop(*S, *Result.Context)) - return; - - diag(S->getForLoc(), "replace loop by 'std%select{|::ranges}0::any_of()'") - << getLangOpts().CPlusPlus20; - } else if (const auto *S = - Result.Nodes.getNodeAs<CXXForRangeStmt>("all_of_loop")) { - if (!isViableLoop(*S, *Result.Context)) - return; - - diag(S->getForLoc(), "replace loop by 'std%select{|::ranges}0::all_of()'") - << getLangOpts().CPlusPlus20; + const auto *AnyOfS = Result.Nodes.getNodeAs<CXXForRangeStmt>("any_of_loop"); + const auto *AllOfS = Result.Nodes.getNodeAs<CXXForRangeStmt>("all_of_loop"); + const CXXForRangeStmt *S = AnyOfS ? AnyOfS : AllOfS; + + if (!S || !isViableLoop(*S, *Result.Context)) + return; + + bool IsAnyOf = (AnyOfS != nullptr); + + diag(S->getForLoc(), + "replace loop by 'std%select{|::ranges}0::%select{all_of|any_of}1()'") + << getLangOpts().CPlusPlus20 << IsAnyOf; + + if (const auto *Init = Result.Nodes.getNodeAs<Expr>("unsafe_range_init")) { + diag(Init->getExprLoc(), + "reusing the temporary range directly in the replacement may be " + "unsafe; consider materializing it in a local variable first", + DiagnosticIDs::Note); } } diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index e6c6e6b07cf96..3974867c3dbe2 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -352,8 +352,9 @@ Changes in existing checks crash from invalid ``Abbreviations`` option. - Improved :doc:`readability-use-anyofallof - <clang-tidy/checks/readability/use-anyofallof>` check by avoiding false - positives in pre-C++20 mode when iterating over temporary range expressions. + <clang-tidy/checks/readability/use-anyofallof>` check by emitting a diagnostic + note to suggest materializing the temporary range when iterating over temporary + range expressions or initializer lists, as reusing them directly could be unsafe. Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp index dcce49029cb23..dc00fe3998fbe 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof-cpp20.cpp @@ -40,6 +40,8 @@ bool good_all_of_temporary_vector() { } bool any_of_initializer_list(int a, int b, int c) { + // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: replace loop by 'std::ranges::any_of()' + // CHECK-MESSAGES: :[[@LINE+1]]:23: note: reusing the temporary range directly in the replacement may be unsafe; consider materializing it in a local variable first for (const auto i : {a, b, c}) if (i == 0) return true; @@ -47,6 +49,8 @@ bool any_of_initializer_list(int a, int b, int c) { } bool all_of_initializer_list(int a, int b, int c) { + // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: replace loop by 'std::ranges::all_of()' + // CHECK-MESSAGES: :[[@LINE+1]]:23: note: reusing the temporary range directly in the replacement may be unsafe; consider materializing it in a local variable first for (const auto i : {a, b, c}) if (i == 0) return false; diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp index 1529cc9be2881..15398639868cc 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/use-anyofallof.cpp @@ -189,6 +189,8 @@ bool good_all_of() { std::vector<int> get_dummy_vec(); bool good_any_of_temporary_vector() { + // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: replace loop by 'std::any_of()' + // CHECK-MESSAGES: :[[@LINE+1]]:16: note: reusing the temporary range directly in the replacement may be unsafe; consider materializing it in a local variable first for (int i : get_dummy_vec()) if (i) return true; @@ -196,6 +198,8 @@ bool good_any_of_temporary_vector() { } bool all_of_temporary_vector() { + // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: replace loop by 'std::all_of()' + // CHECK-MESSAGES: :[[@LINE+1]]:16: note: reusing the temporary range directly in the replacement may be unsafe; consider materializing it in a local variable first for (int i : get_dummy_vec()) if (i) return false; @@ -203,6 +207,8 @@ bool all_of_temporary_vector() { } bool any_of_initializer_list(int a, int b, int c) { + // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: replace loop by 'std::any_of()' + // CHECK-MESSAGES: :[[@LINE+1]]:23: note: reusing the temporary range directly in the replacement may be unsafe; consider materializing it in a local variable first for (const auto i : {a, b, c}) if (i == 0) return true; @@ -210,6 +216,8 @@ bool any_of_initializer_list(int a, int b, int c) { } bool all_of_initializer_list(int a, int b, int c) { + // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: replace loop by 'std::all_of()' + // CHECK-MESSAGES: :[[@LINE+1]]:23: note: reusing the temporary range directly in the replacement may be unsafe; consider materializing it in a local variable first for (const auto i : {a, b, c}) if (i == 0) return false; >From 94702dbcbb9c9bad32428c23886b9b5757643243 Mon Sep 17 00:00:00 2001 From: mtx <[email protected]> Date: Tue, 17 Mar 2026 10:06:17 +0800 Subject: [PATCH 5/5] fixup fixup fixup --- clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp index 1b08ce7ae0ead..3e7fb919ea14b 100644 --- a/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/UseAnyOfAllOfCheck.cpp @@ -103,7 +103,7 @@ void UseAnyOfAllOfCheck::check(const MatchFinder::MatchResult &Result) { if (!S || !isViableLoop(*S, *Result.Context)) return; - bool IsAnyOf = (AnyOfS != nullptr); + const bool IsAnyOf = (AnyOfS != nullptr); diag(S->getForLoc(), "replace loop by 'std%select{|::ranges}0::%select{all_of|any_of}1()'") _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
