[llvm] [ADT] Require base equality in indexed_accessor_iterator::operator==() (PR #107856)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 9 05:47:13 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-adt
Author: Andrei Golubev (andrey-golubev)
<details>
<summary>Changes</summary>
Similarly to operator<(), equality-comparing iterators from different ranges must really be forbidden. The preconditions for being able to do `it1 < it2` and `it1 != it2` (or `it1 == it2` for the matter) ought to be the same. Thus, there's little sense in keeping explicit base object comparison in operator==() whilst having this is a precondition in operator<() and operator-() (e.g. used for std::distance() and such).
---
Full diff: https://github.com/llvm/llvm-project/pull/107856.diff
1 Files Affected:
- (modified) llvm/include/llvm/ADT/STLExtras.h (+2-1)
``````````diff
diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
index e11d6cac7685e4..eb441bb31c9bc8 100644
--- a/llvm/include/llvm/ADT/STLExtras.h
+++ b/llvm/include/llvm/ADT/STLExtras.h
@@ -1194,7 +1194,8 @@ class indexed_accessor_iterator
return index - rhs.index;
}
bool operator==(const indexed_accessor_iterator &rhs) const {
- return base == rhs.base && index == rhs.index;
+ assert(base == rhs.base && "incompatible iterators");
+ return index == rhs.index;
}
bool operator<(const indexed_accessor_iterator &rhs) const {
assert(base == rhs.base && "incompatible iterators");
``````````
</details>
https://github.com/llvm/llvm-project/pull/107856
More information about the llvm-commits
mailing list