================
@@ -0,0 +1,121 @@
+.. title:: clang-tidy - bugprone-incorrect-iterators
+
+bugprone-incorrect-iterators
+============================
+
+Detects calls to iterator algorithms where they are called with potentially
+invalid arguments.
+
+Different ranges
+================
+
+Looks for calls where the range for the `begin` argument is different to the
+`end` argument
+
+.. code-block:: c++
+
+  std::find(a.begin(), b.end(), 0);
+  std::find(std::begin(a), std::end(b));
+
+Mismatched Begin/end
+====================
+
+Looks for calls where the `begin` parameter is passed an `end` argument or vice
+versa
+
+.. code-block:: c++
+
+  std::find(a.begin(), a.begin(), 0); // Second argument should be a.end().
+
+Container Methods
+=================
+
+Looks for calls to methods on containers that expect an iterator inside the
+container but are given a different container
+
+.. code-block:: c++
+
+  vec.insert(other_vec.begin(), 5); // The iterator is invalid for this 
container
+  std::find(a.end(), a.end(), 0); // First argument should be a.begin().
+
+Output Iterators
+================
+
+Looks for calls which accept a single output iterator but are passed the end of
+a container
+
+.. code-block:: c++
+
+  std::copy(correct.begin(), correct.end(), incorrect.end());
+
+Reverse Iteration
+=================
+
+The check understands `rbegin` and `rend` and ensures they are in the correct 
places.
+
+.. code-block:: c++
+
+  std::find(a.rbegin(), a.rend(), 0); // OK.
+  std::find(a.rend(), a.rbegin(), 0); // Arguments are swapped.
+
+Manually creating a reverse iterator using the ``std::make_reverse_iterator`` 
is
+also supported, In this case the check looks for calls to `end` for the `begin`
+parameter and vice versa. The name of functions for creating reverse iterator
+can be configured with the option :option:`MakeReverseIterator`
----------------
EugeneZelenko wrote:

```suggestion
can be configured with the option :option:`MakeReverseIterator`.
```

https://github.com/llvm/llvm-project/pull/99917
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to