SmallVector::erase: Assert that iterators are actually inside the vector.
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 27 Jul 2012 09:10:25 +0000 (09:10 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 27 Jul 2012 09:10:25 +0000 (09:10 +0000)
The rationale here is that it's hard to write loops containing vector erases and
it only shows up if the vector contains non-trivial objects leading to crashes
when forming them out of garbage memory.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160854 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/SmallVector.h

index d1240913434f703d89708c2986f98043fb6e08e1..9ca089877c73a7e1fca70ff1127652dfcfa2a1e1 100644 (file)
@@ -463,6 +463,7 @@ public:
   }
 
   iterator erase(iterator I) {
+    assert(I >= this->begin() && I < this->end() && "Iterator out of bounds");
     iterator N = I;
     // Shift all elts down one.
     this->move(I+1, this->end(), I);
@@ -472,6 +473,8 @@ public:
   }
 
   iterator erase(iterator S, iterator E) {
+    assert(S >= this->begin() && S <= E && E <= this->end() &&
+           "Iterator range out of bounds");
     iterator N = S;
     // Shift all elts down.
     iterator I = this->move(E, this->end(), S);