Browse Source

uint64 has non-trivial destructor on 32-bit windows. This cause arena
allocator to allocate memory twice for uint64.

Bo Yang 10 years ago
parent
commit
3a5455b34b
1 changed files with 5 additions and 5 deletions
  1. 5 5
      src/google/protobuf/arena_unittest.cc

+ 5 - 5
src/google/protobuf/arena_unittest.cc

@@ -1232,11 +1232,11 @@ TEST(ArenaTest, ArenaHooksSanity) {
     EXPECT_EQ(1, ArenaHooksTestUtil::num_init);
     EXPECT_EQ(1, ArenaHooksTestUtil::num_init);
     EXPECT_EQ(0, ArenaHooksTestUtil::num_allocations);
     EXPECT_EQ(0, ArenaHooksTestUtil::num_allocations);
     ::google::protobuf::Arena::Create<uint64>(&arena);
     ::google::protobuf::Arena::Create<uint64>(&arena);
-#ifdef _WIN32
-    EXPECT_EQ(2, ArenaHooksTestUtil::num_allocations);
-#else
-    EXPECT_EQ(1, ArenaHooksTestUtil::num_allocations);
-#endif
+    if (::google::protobuf::internal::has_trivial_destructor<uint64>::value) {
+      EXPECT_EQ(1, ArenaHooksTestUtil::num_allocations);
+    } else {
+      EXPECT_EQ(2, ArenaHooksTestUtil::num_allocations);
+    }
     arena.Reset();
     arena.Reset();
     arena.Reset();
     arena.Reset();
     EXPECT_EQ(2, ArenaHooksTestUtil::num_reset);
     EXPECT_EQ(2, ArenaHooksTestUtil::num_reset);