Index: Jenkins/FullBuild
===================================================================
--- Jenkins/FullBuild	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ Jenkins/FullBuild	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -17,13 +17,14 @@
 
 				parallel (
-					gcc_8_x86: { trigger_build( 'gcc-8',   'x86' ) },
-					gcc_7_x86: { trigger_build( 'gcc-7',   'x86' ) },
-					gcc_6_x86: { trigger_build( 'gcc-6',   'x86' ) },
-					gcc_9_x64: { trigger_build( 'gcc-9',   'x64' ) },
-					gcc_8_x64: { trigger_build( 'gcc-8',   'x64' ) },
-					gcc_7_x64: { trigger_build( 'gcc-7',   'x64' ) },
-					gcc_6_x64: { trigger_build( 'gcc-6',   'x64' ) },
-					gcc_5_x64: { trigger_build( 'gcc-5',   'x64' ) },
-					clang_x64: { trigger_build( 'clang',   'x64' ) },
+					gcc_8_x86_old: { trigger_build( 'gcc-8',   'x86', false ) },
+					gcc_7_x86_old: { trigger_build( 'gcc-7',   'x86', false ) },
+					gcc_6_x86_old: { trigger_build( 'gcc-6',   'x86', false ) },
+					gcc_9_x64_old: { trigger_build( 'gcc-9',   'x64', false ) },
+					gcc_8_x64_old: { trigger_build( 'gcc-8',   'x64', false ) },
+					gcc_7_x64_old: { trigger_build( 'gcc-7',   'x64', false ) },
+					gcc_6_x64_old: { trigger_build( 'gcc-6',   'x64', false ) },
+					gcc_5_x64_old: { trigger_build( 'gcc-5',   'x64', false ) },
+					clang_x64_old: { trigger_build( 'clang',   'x64', false ) },
+					// clang_x64_new: { trigger_build( 'clang',   'x64', true  ) },
 				)
 			}
@@ -59,5 +60,5 @@
 //===========================================================================================================
 
-def trigger_build(String cc, String arch) {
+def trigger_build(String cc, String arch, boolean new_ast) {
 	def result = build job: 'Cforall/master', 		\
 		parameters: [						\
@@ -68,4 +69,7 @@
 			  name: 'Architecture', 			\
 			  value: arch],					\
+			[$class: 'BooleanParameterValue', 		\
+			  name: 'NewAST', 				\
+			  value: new_ast], 				\
 			[$class: 'BooleanParameterValue', 		\
 			  name: 'RunAllTests', 				\
@@ -79,5 +83,5 @@
 			[$class: 'BooleanParameterValue', 		\
 			  name: 'Publish', 				\
-			  value: true], 				\
+			  value: true], 					\
 			[$class: 'BooleanParameterValue', 		\
 			  name: 'Silent', 				\
Index: benchmark/io/http/Makefile.am
===================================================================
--- benchmark/io/http/Makefile.am	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
+++ benchmark/io/http/Makefile.am	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -0,0 +1,49 @@
+######################## -*- Mode: Makefile-Automake -*- ######################
+##
+## Cforall Version 1.0.0 Copyright (C) 2020 University of Waterloo
+##
+## The contents of this file are covered under the licence agreement in the
+## file "LICENCE" distributed with Cforall.
+##
+## Makefile.am --
+##
+## Author           : Thierry Delisle
+## Created On       : Mon Nov 30 14:01:00 2020
+## Last Modified By :
+## Last Modified On :
+## Update Count     :
+###############################################################################
+
+AUTOMAKE_OPTIONS = foreign    # do not require all the GNU file names
+ACLOCAL_AMFLAGS  = -I automake
+
+# applies to both programs
+include $(top_srcdir)/tools/build/cfa.make
+
+AM_CFLAGS = -O2 -Wall -Wextra -I$(srcdir) -lrt -pthread # -Werror
+AM_CFAFLAGS = -quiet -nodebug
+AM_LDFLAGS = -quiet -nodebug
+
+CCLD = $(CFACC)
+
+EXTRA_PROGRAMS = httpforall .dummy_hack
+
+nodist_httpforall_SOURCES = \
+	filecache.cfa \
+	filecache.hfa \
+	main.cfa \
+	options.cfa \
+	options.hfa \
+	protocol.cfa \
+	protocol.hfa \
+	worker.cfa \
+	worker.hfa
+
+nodist__dummy_hack_SOURCES = .dummy_hack.c .dummy_hackxx.cpp
+
+# automake doesn't know we still need C rules so pretend like we have a C program
+.dummy_hack.c:
+	@echo "int main() { return 0; }" > ${@}
+
+.dummy_hackxx.cpp:
+	@echo "int bar() { return 0; }" > ${@}
Index: benchmark/io/http/filecache.cfa
===================================================================
--- benchmark/io/http/filecache.cfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ benchmark/io/http/filecache.cfa	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -199,5 +199,5 @@
 		}
 		free(raw);
-		adelete(file_cache.size, file_cache.entries);
+		adelete( file_cache.entries );
 		exit(0);
 	}
Index: benchmark/rmit.py
===================================================================
--- benchmark/rmit.py	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ benchmark/rmit.py	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -38,13 +38,5 @@
 		self.vars = re.findall("[a-zA-Z]", value)
 
-def parse_option(opt):
-	match = re.search("^(.*):(.*)$", opt)
-	if not match :
-		print('ERROR: extra options should match pattern .*:.*, got {}'.format(opt), file=sys.stderr)
-		sys.exit(1)
-
-	key    = match.group(1)
-	values = match.group(2)
-
+def parse_option(key, values):
 	try:
 		num = int(values)
@@ -121,13 +113,22 @@
 	parser = argparse.ArgumentParser(description='Python Script to implement R.M.I.T. testing : Randomized Multiple Interleaved Trials')
 	parser.add_argument('--list', help='List all the commands that would be run', action='store_true')
-	parser.add_argument('--format', help='How to print the result', choices=formats, default='json')
 	parser.add_argument('--file', nargs='?', type=argparse.FileType('w'), default=sys.stdout)
-	parser.add_argument('-t', '--trials', help='Number of trials to run per combinaison', type=int, default=3)
-	parser.add_argument('-o','--option',action='append')
+	parser.add_argument('--trials', help='Number of trials to run per combinaison', type=int, default=3)
 	parser.add_argument('command', metavar='command', type=str, nargs=1, help='the command prefix to run')
 	parser.add_argument('candidates', metavar='candidates', type=str, nargs='*', help='the candidate suffix to run')
 
 	try:
-		options =  parser.parse_args()
+		options, unknown =  parser.parse_known_args()
+
+		options.option = []
+		while unknown:
+			key = unknown.pop(0)
+			val = unknown.pop(0)
+
+			if key[0] != '-':
+				raise ValueError
+
+			options.option.append((key[1:], val))
+
 	except:
 		print('ERROR: invalid arguments', file=sys.stderr)
@@ -150,5 +151,5 @@
 	# ================================================================================
 	# Identify the options to run
-	opts = dict([parse_option(o) for o in options.option])
+	opts = dict([parse_option(k, v) for k, v in options.option])
 
 	# Evaluate the options (options can depend on the value of other options)
@@ -177,14 +178,20 @@
 	# find expected time
 	time = actions_eta(actions)
-	print("Running {} trials{}".format(len(actions), "" if time == 0 else " (expecting to take {}".format(str(datetime.timedelta(seconds=int(time)))) ))
+	print("Running {} trials{}".format(len(actions), "" if time == 0 else " (expecting to take {})".format(str(datetime.timedelta(seconds=int(time)))) ))
 
 	random.shuffle(actions)
-	result = []
 
 	# ================================================================================
 	# Run
+	options.file.write("[")
+	first = True
 	for i, a in enumerate(actions):
 		sa = " ".join(a)
-		print("{}/{} : {}          \r".format(i, len(actions), sa), end = '')
+		if first:
+			first = False
+		else:
+			options.file.write(",")
+		if options.file != sys.stdout:
+			print("{}/{} : {}          \r".format(i, len(actions), sa), end = '')
 		fields = {}
 		with subprocess.Popen( a, stdout  = subprocess.PIPE, stderr  = subprocess.PIPE) as proc:
@@ -199,47 +206,9 @@
 					fields[match.group(1).strip()] = float(match.group(2).strip().replace(',',''))
 
-		result.append([a[0][2:], sa, fields])
-
-	print("Done                                                                                ")
-
-	# ================================================================================
-	# Print raw
-	if options.format == 'raw':
-		for r in result:
-			print(r, file=options.file)
-		sys.exit(0)
-
-	# ================================================================================
-	# Print json
-	if options.format == 'json':
-		json.dump(result, options.file)
-		sys.exit(0)
-
-	# ================================================================================
-	# Print csv
-	if options.format == 'csv':
-		# Clean result
-		headers = ["series", "command"]
-		data = []
-		first = True
-		for r in result:
-			if first:
-				first = False
-				headers.extend(r[2].keys())
-			else :
-				pass
-
-			d = [r[0], r[1]]
-			for k in headers[2:]:
-				try:
-					d.append(r[2][k])
-				except:
-					d.append(0.0)
-
-			data.append(d)
-
-		# Print csv
-		print(",\t".join(headers), file=options.file)
-		for d in data:
-			print(",\t".join(["{}".format(dd) for dd in d]), file=options.file)
-		sys.exit(0)
+		options.file.write(json.dumps([a[0][2:], sa, fields]))
+		options.file.flush()
+
+	options.file.write("]\n")
+
+	if options.file != sys.stdout:
+		print("Done                                                                                ")
Index: configure.ac
===================================================================
--- configure.ac	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ configure.ac	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -289,4 +289,5 @@
 	longrun_tests/Makefile
 	benchmark/Makefile
+	benchmark/io/http/Makefile
 	tools/Makefile
 	tools/prettyprinter/Makefile
Index: libcfa/src/bits/locks.hfa
===================================================================
--- libcfa/src/bits/locks.hfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ libcfa/src/bits/locks.hfa	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -178,5 +178,5 @@
 		}
 
-		void ^?{}(single_sem & this) {}
+		void ^?{}(single_sem &) {}
 
 		bool wait(single_sem & this) {
@@ -234,5 +234,5 @@
 		}
 
-		void ^?{}(oneshot & this) {}
+		void ^?{}(oneshot &) {}
 
 		// Wait for the post, return immidiately if it already happened.
@@ -281,5 +281,5 @@
 		}
 
-		void ^?{}(future_t & this) {}
+		void ^?{}(future_t &) {}
 
 		// check if the future is available
Index: libcfa/src/concurrency/iofwd.hfa
===================================================================
--- libcfa/src/concurrency/iofwd.hfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ libcfa/src/concurrency/iofwd.hfa	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -38,4 +38,11 @@
 	#define CFA_IO_ASYNC IOSQE_ASYNC
 #endif
+
+#if __OFF_T_MATCHES_OFF64_T
+	typedef __off64_t off_t;
+#else
+	typedef __off_t off_t;
+#endif
+typedef __off64_t off64_t;
 
 struct cluster;
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ libcfa/src/concurrency/kernel.hfa	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -159,5 +159,5 @@
 
 static inline void  ?{}(io_cancellation & this) { this.target = -1u; }
-static inline void ^?{}(io_cancellation & this) {}
+static inline void ^?{}(io_cancellation &) {}
 bool cancel(io_cancellation & this);
 
Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ src/Concurrency/Keywords.cc	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -405,4 +405,6 @@
 			dtor_decl = decl;
 		else if ( vtable_name.empty() )
+			;
+		else if( !decl->has_body() )
 			;
 		else if ( auto param = isMainFor( decl, cast_target ) ) {
Index: src/InitTweak/FixInitNew.cpp
===================================================================
--- src/InitTweak/FixInitNew.cpp	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ src/InitTweak/FixInitNew.cpp	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -413,11 +413,10 @@
 	void SelfAssignChecker::previsit( const ast::ApplicationExpr * appExpr ) {
 		auto function = getFunction( appExpr );
-		if ( function->name == "?=?" ) { // doesn't use isAssignment, because ?+=?, etc. should not count as self-assignment
-			if ( appExpr->args.size() == 2 ) {
-				// check for structural similarity (same variable use, ignore casts, etc. - but does not look too deeply, anything looking like a function is off limits)
-				if ( structurallySimilar( appExpr->args.front(), appExpr->args.back() ) ) {
-					SemanticWarning( appExpr->location, Warning::SelfAssignment, toCString( appExpr->args.front() ) );
-				}
-			}
+		// Doesn't use isAssignment, because ?+=?, etc. should not count as self-assignment.
+		if ( function->name == "?=?" && appExpr->args.size() == 2
+				// Check for structural similarity (same variable use, ignore casts, etc.
+				// (but does not look too deeply, anything looking like a function is off limits).
+				&& structurallySimilar( appExpr->args.front(), appExpr->args.back() ) ) {
+			SemanticWarning( appExpr->location, Warning::SelfAssignment, toCString( appExpr->args.front() ) );
 		}
 	}
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ src/ResolvExpr/Resolver.cc	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -1471,5 +1471,5 @@
 				auto newDecl = fixObjectType(objectDecl, symtab);
 				auto mutDecl = mutate(newDecl);
-				
+
 				// generate CtorInit wrapper when necessary.
 				// in certain cases, fixObjectType is called before reaching
@@ -1489,5 +1489,5 @@
 			currentObject = ast::CurrentObject{ objectDecl->location, objectDecl->get_type() };
 		}
-		
+
 		return objectDecl;
 	}
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
+++ src/main.cc	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
@@ -9,7 +9,7 @@
 // Author           : Peter Buhr and Rob Schluntz
 // Created On       : Fri May 15 23:12:02 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Oct  8 18:17:46 2020
-// Update Count     : 637
+// Last Modified By : Andrew Beach
+// Last Modified On : Tue Dec  1 14:52:00 2020
+// Update Count     : 638
 //
 
@@ -340,5 +340,5 @@
 		} // if
 
-		if( useNewAST) {
+		if( useNewAST ) {
 			if (Stats::Counters::enabled) {
 				ast::pass_visitor_stats.avg = Stats::Counters::build<Stats::Counters::AverageCounter<double>>("Average Depth - New");
@@ -352,4 +352,10 @@
 				return EXIT_SUCCESS;
 			} // if
+
+			// TODO: This is a quick fix to get the build working.
+			// Get rid of fillLocations or at least make a new-ast version.
+			translationUnit = convert( move( transUnit ) );
+			CodeTools::fillLocations( translationUnit );
+			transUnit = convert( move( translationUnit ) );
 
 			PASS( "Fix Init", InitTweak::fix(transUnit, buildingLibrary()));
