fix EvictingCacheMap test bug found w/ -fsanitize-address-use-after-scope
authorLouis Brandy <ldbrandy@fb.com>
Sat, 8 Apr 2017 02:25:07 +0000 (19:25 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Sat, 8 Apr 2017 02:36:12 +0000 (19:36 -0700)
Summary: This test actually stores references to `sum` in objects it puts into the `EvictingCacheMap`. Those references get accessed in the destructor of the objects, which is the destructor of the `EvictingCacheMap`. That means the `sum` variable must outlive (and be declared -before-) the `EvictingCacheMap` it's testing.

Reviewed By: yfeldblum, meyering

Differential Revision: D4854619

fbshipit-source-id: b0a3109278f48d10b4cd0c52a12cb2064f4a00c5

folly/test/EvictingCacheMapTest.cpp

index cac076412de0e07d21cedf0c14bdc9938de1c7df..85a4a5ed319dd676889ff1a91a881360e3bf3719 100644 (file)
@@ -317,15 +317,15 @@ TEST(EvictingCacheMap, DestructorInvocationTest) {
     int* ref;
   };
 
     int* ref;
   };
 
+  int sum;
   EvictingCacheMap<int, SumInt> map(0);
   EvictingCacheMap<int, SumInt> map(0);
+
   EXPECT_EQ(0, map.size());
   EXPECT_TRUE(map.empty());
   for (int i = 0; i < 100; i++) {
     EXPECT_FALSE(map.exists(i));
   }
 
   EXPECT_EQ(0, map.size());
   EXPECT_TRUE(map.empty());
   for (int i = 0; i < 100; i++) {
     EXPECT_FALSE(map.exists(i));
   }
 
-  int sum;
-
   for (int i = 0; i < 100; i++) {
     map.set(i, SumInt(i, &sum));
     EXPECT_EQ(i + 1, map.size());
   for (int i = 0; i < 100; i++) {
     map.set(i, SumInt(i, &sum));
     EXPECT_EQ(i + 1, map.size());