Eliminate more VLAs
authorChristopher Dykes <cdykes@fb.com>
Tue, 1 Nov 2016 18:24:18 +0000 (11:24 -0700)
committerFacebook Github Bot <facebook-github-bot-bot@fb.com>
Tue, 1 Nov 2016 18:38:40 +0000 (11:38 -0700)
Summary:
MSVC doesn't support them, so use dynamic allocation instead.
This also fixes a place where MSVC wasn't propogating the constexpr-ness of a local into the body of a lambda, resulting in an attempt to create a VLA.

Reviewed By: yfeldblum

Differential Revision: D4098932

fbshipit-source-id: 742b2fcd96f7f6eceb5043159403d557f7fc9673

folly/fibers/test/FibersTest.cpp
folly/test/StringTest.cpp

index 859ccda3ee33859bb5e0e55192162afa3961371d..d11ddb30083a5fb2cb22da755f004eecccc59338 100644 (file)
@@ -2057,7 +2057,7 @@ TEST(FiberManager, recordStack) {
     auto& loopController =
         dynamic_cast<SimpleLoopController&>(fm.loopController());
 
-    constexpr size_t n = 1000;
+    static constexpr size_t n = 1000;
     int s = 0;
     fm.addTask([&]() {
       int b[n] = {0};
index e1fd686b0d070199717d7e1c4d31e83d46ad231e..415c6c3df05051e28b051f5fb38102526db7bb3e 100644 (file)
@@ -1103,11 +1103,12 @@ char* copyWithSameAlignment(char* dst, const char* src, size_t length) {
 void testToLowerAscii(Range<const char*> src) {
   // Allocate extra space so we can make copies that start at the
   // same alignment (byte, word, quadword, etc) as the source buffer.
-  char controlBuf[src.size() + 7];
-  char* control = copyWithSameAlignment(controlBuf, src.begin(), src.size());
+  auto controlBuf = std::vector<char>(src.size() + 7);
+  char* control =
+      copyWithSameAlignment(controlBuf.data(), src.begin(), src.size());
 
-  char testBuf[src.size() + 7];
-  char* test = copyWithSameAlignment(testBuf, src.begin(), src.size());
+  auto testBuf = std::vector<char>(src.size() + 7);
+  char* test = copyWithSameAlignment(testBuf.data(), src.begin(), src.size());
 
   for (size_t i = 0; i < src.size(); i++) {
     control[i] = tolower(control[i]);