[sanitizer] Fix __sanitizer::Vector::Resize vector
authorVitaly Buka <vitalybuka@google.com>
Fri, 13 Apr 2018 18:41:52 +0000 (18:41 +0000)
committerVitaly Buka <vitalybuka@google.com>
Fri, 13 Apr 2018 18:41:52 +0000 (18:41 +0000)
Implemented downsizing

Patch by Oleg Doronin

Reviewers: kcc, vitalybuka

Reviewed By: kcc, vitalybuka

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D45605

llvm-svn: 330049

compiler-rt/lib/sanitizer_common/sanitizer_vector.h
compiler-rt/lib/sanitizer_common/tests/sanitizer_vector_test.cc

index 25cfeed..0632ccc 100644 (file)
@@ -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++)
index bdcab7d..59fbf39 100644 (file)
@@ -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