[llvm-commits] [llvm] r160854 - /llvm/trunk/include/llvm/ADT/SmallVector.h

Benjamin Kramer benny.kra at googlemail.com
Fri Jul 27 02:10:25 PDT 2012


Author: d0k
Date: Fri Jul 27 04:10:25 2012
New Revision: 160854

URL: http://llvm.org/viewvc/llvm-project?rev=160854&view=rev
Log:
SmallVector::erase: Assert that iterators are actually inside the vector.

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.

Modified:
    llvm/trunk/include/llvm/ADT/SmallVector.h

Modified: llvm/trunk/include/llvm/ADT/SmallVector.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SmallVector.h?rev=160854&r1=160853&r2=160854&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/SmallVector.h (original)
+++ llvm/trunk/include/llvm/ADT/SmallVector.h Fri Jul 27 04:10:25 2012
@@ -463,6 +463,7 @@
   }
 
   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 @@
   }
 
   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);





More information about the llvm-commits mailing list