https://github.com/kuhar created 
https://github.com/llvm/llvm-project/pull/177655

I missed this in https://github.com/llvm/llvm-project/pull/177457.

All range wrappers from STLExtras should be covered by llvm-use-ranges now.

>From a59ecdad923abee59bab0c869d0da7ee00e9491d Mon Sep 17 00:00:00 2001
From: Jakub Kuderski <[email protected]>
Date: Fri, 23 Jan 2026 14:04:06 -0500
Subject: [PATCH] [clang-tidy] Add llvm::accumulate to llvm-use-ranges

---
 .../clang-tidy/llvm/UseRangesCheck.cpp        | 40 +++++--------------
 clang-tools-extra/docs/ReleaseNotes.rst       |  3 +-
 .../clang-tidy/checks/llvm/use-ranges.rst     |  1 +
 .../clang-tidy/checkers/llvm/use-ranges.cpp   | 15 +++++++
 4 files changed, 28 insertions(+), 31 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/llvm/UseRangesCheck.cpp 
b/clang-tools-extra/clang-tidy/llvm/UseRangesCheck.cpp
index 70d8e75405e91..bd82915dc232d 100644
--- a/clang-tools-extra/clang-tidy/llvm/UseRangesCheck.cpp
+++ b/clang-tools-extra/clang-tidy/llvm/UseRangesCheck.cpp
@@ -55,36 +55,16 @@ utils::UseRangesCheck::ReplacerMap 
UseRangesCheck::getReplacerMap() const {
       };
 
   // Single range algorithms.
-  AddStdToLLVM(llvm::makeIntrusiveRefCnt<StdToLLVMReplacer>(SingleSig),
-               {"adjacent_find",
-                "all_of",
-                "any_of",
-                "binary_search",
-                "copy",
-                "copy_if",
-                "count",
-                "count_if",
-                "fill",
-                "find",
-                "find_if",
-                "find_if_not",
-                "for_each",
-                "is_sorted",
-                "lower_bound",
-                "max_element",
-                "min_element",
-                "none_of",
-                "partition",
-                "partition_point",
-                "remove_if",
-                "replace",
-                "replace_copy",
-                "replace_copy_if",
-                "stable_sort",
-                "transform",
-                "uninitialized_copy",
-                "unique",
-                "upper_bound"});
+  AddStdToLLVM(
+      llvm::makeIntrusiveRefCnt<StdToLLVMReplacer>(SingleSig),
+      {"accumulate",      "adjacent_find", "all_of",    "any_of",
+       "binary_search",   "copy",          "copy_if",   "count",
+       "count_if",        "fill",          "find",      "find_if",
+       "find_if_not",     "for_each",      "is_sorted", "lower_bound",
+       "max_element",     "min_element",   "none_of",   "partition",
+       "partition_point", "remove_if",     "replace",   "replace_copy",
+       "replace_copy_if", "stable_sort",   "transform", "uninitialized_copy",
+       "unique",          "upper_bound"});
 
   // Two range algorithms.
   AddStdToLLVM(llvm::makeIntrusiveRefCnt<StdToLLVMReplacer>(TwoSig),
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 1e5d4ef5dbb3b..5cfb6476dcc1f 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -122,7 +122,8 @@ Changes in existing checks
 
 - Improved :doc:`llvm-use-ranges
   <clang-tidy/checks/llvm/use-ranges>` check by adding support for the 
following
-  algorithms: ``std::replace_copy`` and ``std::replace_copy_if``.
+  algorithms: ``std::accumulate``, ``std::replace_copy``, and
+  ``std::replace_copy_if``.
 
 - Improved :doc:`misc-const-correctness
   <clang-tidy/checks/misc/const-correctness>` check:
diff --git a/clang-tools-extra/docs/clang-tidy/checks/llvm/use-ranges.rst 
b/clang-tools-extra/docs/clang-tidy/checks/llvm/use-ranges.rst
index 6ef7f476ba2ff..6f9efa590de53 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/llvm/use-ranges.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/llvm/use-ranges.rst
@@ -27,6 +27,7 @@ Supported algorithms
 
 Calls to the following STL algorithms are checked:
 
+``std::accumulate``,
 ``std::adjacent_find``,
 ``std::all_of``,
 ``std::any_of``,
diff --git a/clang-tools-extra/test/clang-tidy/checkers/llvm/use-ranges.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/llvm/use-ranges.cpp
index 58cdeb440eaa3..415593ae16a53 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/llvm/use-ranges.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/llvm/use-ranges.cpp
@@ -21,6 +21,12 @@ template <typename T> class vector {
 template <typename T> T* begin(T (&arr)[5]);
 template <typename T> T* end(T (&arr)[5]);
 
+template <class InputIt, class T>
+T accumulate(InputIt first, InputIt last, T init);
+
+template <class InputIt, class T, class BinaryOp>
+T accumulate(InputIt first, InputIt last, T init, BinaryOp op);
+
 template <class InputIt, class T>
 InputIt find(InputIt first, InputIt last, const T &value);
 
@@ -78,11 +84,20 @@ OutputIt replace_copy_if(InputIt first, InputIt last, 
OutputIt d_first,
 
 bool is_even(int x);
 void double_ref(int& x);
+int multiply(int a, int b);
 
 void test_positive() {
   std::vector<int> vec;
   int arr[5] = {1, 2, 3, 4, 5};
 
+  int sum = std::accumulate(vec.begin(), vec.end(), 0);
+  // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use an LLVM range-based 
algorithm
+  // CHECK-FIXES: int sum = llvm::accumulate(vec, 0);
+
+  int product = std::accumulate(vec.begin(), vec.end(), 1, multiply);
+  // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: use an LLVM range-based 
algorithm
+  // CHECK-FIXES: int product = llvm::accumulate(vec, 1, multiply);
+
   auto it1 = std::find(vec.begin(), vec.end(), 3);
   // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: use an LLVM range-based 
algorithm
   // CHECK-FIXES: auto it1 = llvm::find(vec, 3);

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to