diff options
-rw-r--r-- | lib/sanitizer_common/sanitizer_vector.h | 4 | ||||
-rw-r--r-- | lib/sanitizer_common/tests/sanitizer_vector_test.cc | 9 |
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 |