From 4e86e5eedc684453fe0af6eca2ebdbff33db012c Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Sat, 11 Apr 2020 14:53:09 -0700 Subject: [PATCH] [DenseMap] Add assertion that end() iterator isn't derefenced. This would have saved me some time this morning. --- llvm/include/llvm/ADT/DenseMap.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/llvm/include/llvm/ADT/DenseMap.h b/llvm/include/llvm/ADT/DenseMap.h index b73afae..8d83f7e 100644 --- a/llvm/include/llvm/ADT/DenseMap.h +++ b/llvm/include/llvm/ADT/DenseMap.h @@ -1201,12 +1201,14 @@ public: reference operator*() const { assert(isHandleInSync() && "invalid iterator access!"); + assert(Ptr != End && "dereferencing end() iterator"); if (shouldReverseIterate()) return Ptr[-1]; return *Ptr; } pointer operator->() const { assert(isHandleInSync() && "invalid iterator access!"); + assert(Ptr != End && "dereferencing end() iterator"); if (shouldReverseIterate()) 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()) { --Ptr; RetreatPastEmptyBuckets(); -- 2.7.4