[sanitizer] Add InternalMmapVector::swap
authorVitaly Buka <vitalybuka@google.com>
Tue, 8 May 2018 04:57:08 +0000 (04:57 +0000)
committerVitaly Buka <vitalybuka@google.com>
Tue, 8 May 2018 04:57:08 +0000 (04:57 +0000)
llvm-svn: 331736

compiler-rt/lib/sanitizer_common/sanitizer_common.h
compiler-rt/lib/sanitizer_common/tests/sanitizer_common_test.cc

index cd47028c949a52277bcce6d3c65eb716d4cf5851..52958de6de0e06099140455eeb68fe0f7f53c146 100644 (file)
@@ -510,6 +510,12 @@ class InternalMmapVectorNoCtor {
     return data() + size();
   }
 
+  void swap(InternalMmapVectorNoCtor &other) {
+    Swap(data_, other.data_);
+    Swap(capacity_, other.capacity_);
+    Swap(size_, other.size_);
+  }
+
  private:
   void Resize(uptr new_capacity) {
     CHECK_GT(new_capacity, 0);
index ff5c63279dcb7d1f95c4a53d82e82c883c0de4db..da761bef689c66567e70a444bb13ccb64121440e 100644 (file)
@@ -130,6 +130,24 @@ TEST(SanitizerCommon, InternalMmapVectorEq) {
   EXPECT_TRUE(vector1 != vector2);
 }
 
+TEST(SanitizerCommon, InternalMmapVectorSwap) {
+  InternalMmapVector<uptr> vector1;
+  InternalMmapVector<uptr> vector2;
+  InternalMmapVector<uptr> vector3;
+  InternalMmapVector<uptr> vector4;
+  for (uptr i = 0; i < 100; i++) {
+    vector1.push_back(i);
+    vector2.push_back(i);
+    vector3.push_back(-i);
+    vector4.push_back(-i);
+  }
+  EXPECT_NE(vector2, vector3);
+  EXPECT_NE(vector1, vector4);
+  vector1.swap(vector3);
+  EXPECT_EQ(vector2, vector3);
+  EXPECT_EQ(vector1, vector4);
+}
+
 void TestThreadInfo(bool main) {
   uptr stk_addr = 0;
   uptr stk_size = 0;