aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2012-07-27 09:10:25 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2012-07-27 09:10:25 +0000
commit38862ecf7974a05646285a553f490fc6bd382b6d (patch)
tree983cace67b437748036dcd88dc294b5327f82164
parent4c38790f70d84313c6cb17af99ef2f9462f71c17 (diff)
downloadllvm-38862ecf7974a05646285a553f490fc6bd382b6d.zip
llvm-38862ecf7974a05646285a553f490fc6bd382b6d.tar.gz
llvm-38862ecf7974a05646285a553f490fc6bd382b6d.tar.bz2
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. llvm-svn: 160854
-rw-r--r--llvm/include/llvm/ADT/SmallVector.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/include/llvm/ADT/SmallVector.h b/llvm/include/llvm/ADT/SmallVector.h
index d124091..9ca0898 100644
--- a/llvm/include/llvm/ADT/SmallVector.h
+++ b/llvm/include/llvm/ADT/SmallVector.h
@@ -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);