[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