folly: allow to build with clang.dev (flex arrays vs. lambda)
authorJim Meyering <meyering@fb.com>
Fri, 4 Apr 2014 20:14:20 +0000 (13:14 -0700)
committerSara Golemon <sgolemon@fb.com>
Fri, 18 Apr 2014 19:04:14 +0000 (12:04 -0700)
Summary:
* folly/test/CacheLocalityTest.cpp (contentionAtWidth): Work around
clang's prohibition against using flexible arrays in a lambda.

Test Plan:
fbconfig --clang --with-project-version clang:dev folly/test \
&& fbmake runtests

Reviewed By: ngbronson@fb.com

FB internal diff: D1263620

folly/test/CacheLocalityTest.cpp

index 1d870a0a68a095599a127e57f7d76fb296b856f0..3a739a001e7629d93f50aff1ac4f969ec4414d43 100644 (file)
@@ -528,7 +528,7 @@ static void contentionAtWidth(size_t iters, size_t stripes, size_t work,
   // that we get contention on 128 byte boundaries for Ivy Bridge.  The
   // extra indirection adds 1 or 2 nanos
   assert(counterAlignment >= sizeof(std::atomic<size_t>));
-  char raw[counterAlignment * stripes];
+  std::vector<char> raw(counterAlignment * stripes);
 
   // if we happen to be using the tlsRoundRobin, then sequentially
   // assigning the thread identifiers is the unlikely best-case scenario.
@@ -543,7 +543,8 @@ static void contentionAtWidth(size_t iters, size_t stripes, size_t work,
     threads.push_back(std::thread([&,iters,stripes,work]() {
       std::atomic<size_t>* counters[stripes];
       for (size_t i = 0; i < stripes; ++i) {
-        counters[i] = new (raw + counterAlignment * i) std::atomic<size_t>();
+        counters[i]
+          = new (raw.data() + counterAlignment * i) std::atomic<size_t>();
       }
 
       spreader.current();
@@ -702,4 +703,3 @@ int main(int argc, char** argv) {
   }
   return ret;
 }
-