Index: benchmark/readyQ/churn.cfa
===================================================================
--- benchmark/readyQ/churn.cfa	(revision ae020ea03b800a108f052ec9623f2521ee4f77c6)
+++ benchmark/readyQ/churn.cfa	(revision 8fe35be6c47f9dc4cc0c7b63da8d00302dc81249)
@@ -58,5 +58,5 @@
 
 			threads_left = nthreads;
-			BThrd * threads[nthreads];
+			BThrd ** threads = alloc(nthreads);
 			for(i; nthreads ) {
 				BThrd & t = *(threads[i] = malloc());
@@ -90,4 +90,5 @@
 
 			free(spots);
+			free(threads);
 		}
 
Index: benchmark/readyQ/cycle.cfa
===================================================================
--- benchmark/readyQ/cycle.cfa	(revision ae020ea03b800a108f052ec9623f2521ee4f77c6)
+++ benchmark/readyQ/cycle.cfa	(revision 8fe35be6c47f9dc4cc0c7b63da8d00302dc81249)
@@ -52,7 +52,8 @@
 		{
 			threads_left = tthreads;
-			BThrd * threads[tthreads];
-			Partner thddata[tthreads];
+			BThrd **  threads = alloc(tthreads);
+			Partner * thddata = alloc(tthreads);
 			for(i; tthreads) {
+				(thddata[pi]){};
 				unsigned pi = (i + nthreads) % tthreads;
 				thddata[i].next = &thddata[pi].self;
@@ -83,4 +84,6 @@
 				delete(threads[i]);
 			}
+			free(threads);
+			free(thddata);
 		}
 
Index: benchmark/readyQ/cycle.cpp
===================================================================
--- benchmark/readyQ/cycle.cpp	(revision ae020ea03b800a108f052ec9623f2521ee4f77c6)
+++ benchmark/readyQ/cycle.cpp	(revision 8fe35be6c47f9dc4cc0c7b63da8d00302dc81249)
@@ -39,6 +39,6 @@
 		{
 			threads_left = tthreads;
-			Fibre * threads[tthreads];
-			Partner thddata[tthreads];
+			Fibre * threads = new Fibre *[tthreads]();
+			Partner thddata = new Partner[tthreads]();
 			for(unsigned i = 0; i < tthreads; i++) {
 				unsigned pi = (i + nthreads) % tthreads;
@@ -69,4 +69,7 @@
 				global_blocks  += thddata[i].blocks;
 			}
+
+			delete[](threads);
+			delete[](thddata);
 		}
 
Index: benchmark/readyQ/locality.cfa
===================================================================
--- benchmark/readyQ/locality.cfa	(revision ae020ea03b800a108f052ec9623f2521ee4f77c6)
+++ benchmark/readyQ/locality.cfa	(revision 8fe35be6c47f9dc4cc0c7b63da8d00302dc81249)
@@ -222,5 +222,5 @@
 		threads_left = nprocs;
 		{
-			MyThread * threads[nthreads];
+			MyThread ** threads = alloc(nthreads);
 			for(i; nthreads) {
 				threads[i] = malloc();
@@ -259,4 +259,5 @@
 				free( threads[i] );
 			}
+			free( threads );
 		}
 
Index: benchmark/readyQ/locality.cpp
===================================================================
--- benchmark/readyQ/locality.cpp	(revision ae020ea03b800a108f052ec9623f2521ee4f77c6)
+++ benchmark/readyQ/locality.cpp	(revision 8fe35be6c47f9dc4cc0c7b63da8d00302dc81249)
@@ -217,5 +217,5 @@
 	{
 		FibreInit(1, nprocs);
-		MyData * data_arrays[nthreads];
+		MyData ** data_arrays = new MyData *[nthreads]();
 		for(size_t i = 0; i < nthreads; i++) {
 			data_arrays[i] = new MyData( i, wsize );
@@ -228,6 +228,6 @@
 
 		threads_left = nthreads - nspots;
-		Fibre * threads[nthreads];
-		MyCtx * thddata[nthreads];
+		Fibre ** threads = new Fibre *[nthreads]();
+		MyCtx ** thddata = new MyCtx *[nthreads]();
 		{
 			for(size_t i = 0; i < nthreads; i++) {
@@ -267,8 +267,12 @@
 			delete( data_arrays[i] );
 		}
+		delete[](data_arrays);
 
 		for(size_t i = 0; i < nspots; i++) {
 			delete( spots[i] );
 		}
+
+		delete[](threads);
+		delete[](thddata);
 	}
 
Index: benchmark/readyQ/yield.cfa
===================================================================
--- benchmark/readyQ/yield.cfa	(revision ae020ea03b800a108f052ec9623f2521ee4f77c6)
+++ benchmark/readyQ/yield.cfa	(revision 8fe35be6c47f9dc4cc0c7b63da8d00302dc81249)
@@ -34,5 +34,9 @@
 		{
 			threads_left = nthreads;
-			Yielder threads[nthreads];
+			Yielder * threads = alloc(nthreads);
+			for(i; nthreads) {
+				(threads[i]){};
+			}
+
 			printf("Starting\n");
 
@@ -52,5 +56,7 @@
 				Yielder & y = join( threads[i] );
 				global_counter += y.count;
+				^(threads[i]){};
 			}
+			free(threads);
 		}
 
Index: benchmark/readyQ/yield.cpp
===================================================================
--- benchmark/readyQ/yield.cpp	(revision ae020ea03b800a108f052ec9623f2521ee4f77c6)
+++ benchmark/readyQ/yield.cpp	(revision 8fe35be6c47f9dc4cc0c7b63da8d00302dc81249)
@@ -33,5 +33,5 @@
 		{
 			threads_left = nthreads;
-			Fibre * threads[nthreads];
+			Fibre ** threads = new Fibre *[nthreads]();
 			for(unsigned i = 0; i < nthreads; i++) {
 				threads[i] = new Fibre();
@@ -52,4 +52,5 @@
 				fibre_join( threads[i], nullptr );
 			}
+			delete[] threads;
 		}
 
