summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sanitizer_common/sanitizer_vector.h4
-rw-r--r--lib/sanitizer_common/tests/sanitizer_vector_test.cc9
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/sanitizer_common/sanitizer_vector.h b/lib/sanitizer_common/sanitizer_vector.h
index 25cfeed35..0632ccce2 100644
--- a/lib/sanitizer_common/sanitizer_vector.h
+++ b/lib/sanitizer_common/sanitizer_vector.h
@@ -82,6 +82,10 @@ class Vector {
return;
}
uptr old_size = Size();
+ if (size <= old_size) {
+ end_ = begin_ + size;
+ return;
+ }
EnsureSize(size);
if (old_size < size) {
for (uptr i = old_size; i < size; i++)
diff --git a/lib/sanitizer_common/tests/sanitizer_vector_test.cc b/lib/sanitizer_common/tests/sanitizer_vector_test.cc
index bdcab7dd7..59fbf3968 100644
--- a/lib/sanitizer_common/tests/sanitizer_vector_test.cc
+++ b/lib/sanitizer_common/tests/sanitizer_vector_test.cc
@@ -39,4 +39,13 @@ TEST(Vector, Stride) {
}
}
+TEST(Vector, ResizeReduction) {
+ Vector<int> v;
+ v.PushBack(0);
+ v.PushBack(0);
+ EXPECT_EQ(v.Size(), 2u);
+ v.Resize(1);
+ EXPECT_EQ(v.Size(), 1u);
+}
+
} // namespace __sanitizer