[llvm] 7fb19cb - [ADT] Require base equality in indexed_accessor_iterator::operator==() (#107856)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 10 10:30:01 PDT 2024
Author: Andrei Golubev
Date: 2024-09-10T10:29:57-07:00
New Revision: 7fb19cb24ca154dfffa300eaac1f037b74a9539e
URL: https://github.com/llvm/llvm-project/commit/7fb19cb24ca154dfffa300eaac1f037b74a9539e
DIFF: https://github.com/llvm/llvm-project/commit/7fb19cb24ca154dfffa300eaac1f037b74a9539e.diff
LOG: [ADT] Require base equality in indexed_accessor_iterator::operator==() (#107856)
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).
Added:
Modified:
llvm/include/llvm/ADT/STLExtras.h
Removed:
################################################################################
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");
More information about the llvm-commits
mailing list