[DenseMap] Add assertion that end() iterator isn't derefenced.
authorEli Friedman <efriedma@quicinc.com>
Sat, 11 Apr 2020 21:53:09 +0000 (14:53 -0700)
committerEli Friedman <efriedma@quicinc.com>
Sat, 11 Apr 2020 21:53:09 +0000 (14:53 -0700)
This would have saved me some time this morning.

llvm/include/llvm/ADT/DenseMap.h

index b73afae..8d83f7e 100644 (file)
@@ -1201,12 +1201,14 @@ public:
 
   reference operator*() const {
     assert(isHandleInSync() && "invalid iterator access!");
+    assert(Ptr != End && "dereferencing end() iterator");
     if (shouldReverseIterate<KeyT>())
       return Ptr[-1];
     return *Ptr;
   }
   pointer operator->() const {
     assert(isHandleInSync() && "invalid iterator access!");
+    assert(Ptr != End && "dereferencing end() iterator");
     if (shouldReverseIterate<KeyT>())
       return &(Ptr[-1]);
     return Ptr;
@@ -1229,6 +1231,7 @@ public:
 
   inline DenseMapIterator& operator++() {  // Preincrement
     assert(isHandleInSync() && "invalid iterator access!");
+    assert(Ptr != End && "incrementing end() iterator");
     if (shouldReverseIterate<KeyT>()) {
       --Ptr;
       RetreatPastEmptyBuckets();