Author: Michał Górny Date: 2025-12-20T20:29:48+01:00 New Revision: a22e8d3ed9000e24fec80c6bd4b3ad7261cf5ccd
URL: https://github.com/llvm/llvm-project/commit/a22e8d3ed9000e24fec80c6bd4b3ad7261cf5ccd DIFF: https://github.com/llvm/llvm-project/commit/a22e8d3ed9000e24fec80c6bd4b3ad7261cf5ccd.diff LOG: Revert "Make STLExtras's (all|any|none)_of() Utility Functions Constexpr-Frie…" This reverts commit 21fd8cc2a5584795107f384c5bf8d36c141188fc. Added: Modified: llvm/include/llvm/ADT/STLExtras.h llvm/unittests/ADT/STLExtrasTest.cpp Removed: ################################################################################ diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h index d4632ab72e563..409cd7b60fa00 100644 --- a/llvm/include/llvm/ADT/STLExtras.h +++ b/llvm/include/llvm/ADT/STLExtras.h @@ -638,10 +638,10 @@ make_early_inc_range(RangeT &&Range) { // Forward declarations required by zip_shortest/zip_equal/zip_first/zip_longest template <typename R, typename UnaryPredicate> -constexpr bool all_of(R &&range, UnaryPredicate P); +bool all_of(R &&range, UnaryPredicate P); template <typename R, typename UnaryPredicate> -constexpr bool any_of(R &&range, UnaryPredicate P); +bool any_of(R &&range, UnaryPredicate P); template <typename T> bool all_equal(std::initializer_list<T> Values); @@ -1734,31 +1734,22 @@ UnaryFunction for_each(R &&Range, UnaryFunction F) { /// Provide wrappers to std::all_of which take ranges instead of having to pass /// begin/end explicitly. template <typename R, typename UnaryPredicate> -constexpr bool all_of(R &&Range, UnaryPredicate P) { - // TODO: switch back to std::all_of() after it becomes constexpr in c++20. - for (auto I = adl_begin(Range), E = adl_end(Range); I != E; ++I) - if (!P(*I)) - return false; - return true; +bool all_of(R &&Range, UnaryPredicate P) { + return std::all_of(adl_begin(Range), adl_end(Range), P); } /// Provide wrappers to std::any_of which take ranges instead of having to pass /// begin/end explicitly. template <typename R, typename UnaryPredicate> -constexpr bool any_of(R &&Range, UnaryPredicate P) { - // TODO: switch back to std::any_of() after it becomes constexpr in c++20. - for (auto I = adl_begin(Range), E = adl_end(Range); I != E; ++I) - if (P(*I)) - return true; - return false; +bool any_of(R &&Range, UnaryPredicate P) { + return std::any_of(adl_begin(Range), adl_end(Range), P); } /// Provide wrappers to std::none_of which take ranges instead of having to pass /// begin/end explicitly. template <typename R, typename UnaryPredicate> -constexpr bool none_of(R &&Range, UnaryPredicate P) { - // TODO: switch back to std::none_of() after it becomes constexpr in c++20. - return !any_of(Range, P); +bool none_of(R &&Range, UnaryPredicate P) { + return std::none_of(adl_begin(Range), adl_end(Range), P); } /// Provide wrappers to std::fill which take ranges instead of having to pass diff --git a/llvm/unittests/ADT/STLExtrasTest.cpp b/llvm/unittests/ADT/STLExtrasTest.cpp index da84345eecda8..dbf439b8d63a0 100644 --- a/llvm/unittests/ADT/STLExtrasTest.cpp +++ b/llvm/unittests/ADT/STLExtrasTest.cpp @@ -1260,25 +1260,6 @@ TEST(STLExtras, MoveRange) { EXPECT_TRUE(llvm::all_of(V4, HasVal)); } -TEST(STLExtrasTest, AllOfAnyOfNoneOfConstexpr) { - // Verify constexpr evaluation works. Functional correctness is tested in - // runtime tests (e.g., MoveRange). - constexpr std::array<int, 3> Arr = {1, 2, 3}; - static_assert(all_of(Arr, [](int X) { return X > 0; })); - static_assert(any_of(Arr, [](int X) { return X == 2; })); - static_assert(none_of(Arr, [](int X) { return X < 0; })); - - // Verify constexpr works with C-style arrays. - constexpr int CArr[] = {1, 2}; - static_assert(all_of(CArr, [](int X) { return X > 0; })); - - // Verify empty range edge case. - constexpr std::array<int, 0> Empty = {}; - static_assert(all_of(Empty, [](int) { return false; })); - static_assert(!any_of(Empty, [](int) { return true; })); - static_assert(none_of(Empty, [](int) { return true; })); -} - TEST(STLExtras, Unique) { std::vector<int> V = {1, 5, 5, 4, 3, 3, 3}; _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
