Index: src/Common/Debug.h
===================================================================
--- src/Common/Debug.h	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/Common/Debug.h	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -24,15 +24,34 @@
 #include "SynTree/Declaration.h"
 
-/// debug codegen a translation unit
-static inline void debugCodeGen( const std::list< Declaration * > & translationUnit, const std::string & label ) {
-	std::list< Declaration * > decls;
+#define DEBUG
 
-	filter( translationUnit.begin(), translationUnit.end(), back_inserter( decls ), []( Declaration * decl ) {
-		return ! LinkageSpec::isBuiltin( decl->get_linkage() );
-	});
+namespace Debug {
+	/// debug codegen a translation unit
+	static inline void codeGen( __attribute__((unused)) const std::list< Declaration * > & translationUnit, __attribute__((unused)) const std::string & label ) {
+	#ifdef DEBUG
+		std::list< Declaration * > decls;
 
-	std::cerr << "======" << label << "======" << std::endl;
-	CodeGen::generate( decls, std::cerr, false, true );
-} // dump
+		filter( translationUnit.begin(), translationUnit.end(), back_inserter( decls ), []( Declaration * decl ) {
+			return ! LinkageSpec::isBuiltin( decl->get_linkage() );
+		});
+
+		std::cerr << "======" << label << "======" << std::endl;
+		CodeGen::generate( decls, std::cerr, false, true );
+	#endif
+	} // dump
+
+	static inline void treeDump( __attribute__((unused)) const std::list< Declaration * > & translationUnit, __attribute__((unused)) const std::string & label ) {
+	#ifdef DEBUG
+		std::list< Declaration * > decls;
+
+		filter( translationUnit.begin(), translationUnit.end(), back_inserter( decls ), []( Declaration * decl ) {
+			return ! LinkageSpec::isBuiltin( decl->get_linkage() );
+		});
+
+		std::cerr << "======" << label << "======" << std::endl;
+		printAll( decls, std::cerr );
+	#endif
+	} // dump
+}
 
 // Local Variables: //
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/Parser/DeclarationNode.cc	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Sep 23 18:16:48 2017
-// Update Count     : 1024
+// Last Modified On : Mon Nov 20 09:21:52 2017
+// Update Count     : 1031
 //
 
@@ -509,16 +509,13 @@
 
 DeclarationNode * DeclarationNode::addQualifiers( DeclarationNode * q ) {
-	if ( ! q ) { delete q; return this; }
+	if ( ! q ) { delete q; return this; }				// empty qualifier
 
 	checkSpecifiers( q );
 	copySpecifiers( q );
 
-	if ( ! q->type ) {
-		delete q;
-		return this;
-	} // if
+	if ( ! q->type ) { delete q; return this; }
 
 	if ( ! type ) {
-		type = q->type;									// reuse this structure
+		type = q->type;									// reuse structure
 		q->type = nullptr;
 		delete q;
@@ -526,17 +523,21 @@
 	} // if
 
-	if ( q->type->forall ) {
-		if ( type->forall ) {
-			type->forall->appendList( q->type->forall );
+	if ( q->type->forall ) {							// forall qualifier ?
+		if ( type->forall ) {							// polymorphic routine ?
+			type->forall->appendList( q->type->forall ); // augment forall qualifier
 		} else {
-			if ( type->kind == TypeData::Aggregate ) {
-				type->aggregate.params = q->type->forall;
-				// change implicit typedef from TYPEDEFname to TYPEGENname
-				typedefTable.changeKind( *type->aggregate.name, TypedefTable::TG );
-			} else {
-				type->forall = q->type->forall;
+			if ( type->kind == TypeData::Aggregate ) {	// struct/union ?
+				if ( type->aggregate.params ) {			// polymorphic ?
+					type->aggregate.params->appendList( q->type->forall ); // augment forall qualifier
+				} else {								// not polymorphic
+					type->aggregate.params = q->type->forall; // make polymorphic type
+					// change implicit typedef from TYPEDEFname to TYPEGENname
+					typedefTable.changeKind( *type->aggregate.name, TypedefTable::TG );
+				} // if
+			} else {									// not polymorphic
+				type->forall = q->type->forall;			// make polymorphic routine
 			} // if
 		} // if
-		q->type->forall = nullptr;
+		q->type->forall = nullptr;						// forall qualifier moved
 	} // if
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/Parser/parser.yy	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Oct 25 12:28:54 2017
-// Update Count     : 2893
+// Last Modified On : Mon Nov 20 09:45:36 2017
+// Update Count     : 2945
 //
 
@@ -114,4 +114,16 @@
 	} // for
 } // distExt
+
+// There is an ambiguity for inline generic-routine return-types and generic routines.
+//   forall( otype T ) struct S { int i; } bar( T ) {}
+// Does the forall bind to the struct or the routine, and how would it be possible to explicitly specify the binding.
+//   forall( otype T ) struct S { int T; } forall( otype W ) bar( W ) {}
+
+void rebindForall( DeclarationNode * declSpec, DeclarationNode * funcDecl ) {
+	if ( declSpec->type->kind == TypeData::Aggregate ) { // return is aggregate definition
+		funcDecl->type->forall = declSpec->type->aggregate.params; // move forall from aggregate to function type
+		declSpec->type->aggregate.params = nullptr;
+	} // if
+} // rebindForall
 
 bool forall = false;									// aggregate have one or more forall qualifiers ?
@@ -348,9 +360,8 @@
 
 
-// Handle single shift/reduce conflict for dangling else by shifting the ELSE token. For example, this string
-// is ambiguous:
-// .---------.				matches IF '(' comma_expression ')' statement . (reduce)
-// if ( C ) S1 else S2
-// `-----------------'		matches IF '(' comma_expression ')' statement . (shift) ELSE statement */
+// Handle shift/reduce conflict for dangling else by shifting the ELSE token. For example, this string is ambiguous:
+//   .---------.				matches IF '(' comma_expression ')' statement . (reduce)
+//   if ( C ) S1 else S2
+//   `-----------------'		matches IF '(' comma_expression ')' statement . (shift) ELSE statement */
 // Similar issues exit with the waitfor statement.
 
@@ -361,4 +372,16 @@
 %precedence TIMEOUT	// token precedence for start of TIMEOUT in WAITFOR statement
 %precedence ELSE	// token precedence for start of else clause in IF/WAITFOR statement
+
+// Handle shift/reduce conflict for generic type by shifting the '(' token. For example, this string is ambiguous:
+//   forall( otype T ) struct Foo { T v; };
+//       .-----.				matches pointer to function returning a generic (which is impossible without a type)
+//   Foo ( *fp )( int );
+//   `---'						matches start of TYPEGENname '('
+// Must be:
+// Foo( int ) ( *fp )( int );
+
+// Order of these lines matters (low-to-high precedence).
+%precedence TYPEGENname
+%precedence '('
 
 %locations			// support location tracking for error messages
@@ -1765,5 +1788,7 @@
 
 typegen_name:											// CFA
-	TYPEGENname '(' ')'
+	TYPEGENname
+		{ $$ = DeclarationNode::newFromTypeGen( $1, nullptr ); }
+	| TYPEGENname '(' ')'
 		{ $$ = DeclarationNode::newFromTypeGen( $1, nullptr ); }
 	| TYPEGENname '(' type_list ')'
@@ -1809,5 +1834,13 @@
 		}
 	| aggregate_key attribute_list_opt typegen_name		// CFA
-		{ $$ = $3->addQualifiers( $2 ); }
+		{
+			// Create new generic declaration with same name as previous forward declaration, where the IDENTIFIER is
+			// switched to a TYPEGENname. Link any generic arguments from typegen_name to new generic declaration and
+			// delete newFromTypeGen.
+			$$ = DeclarationNode::newAggregate( $1, $3->type->symbolic.name, $3->type->symbolic.actuals, nullptr, false )->addQualifiers( $2 );
+			$3->type->symbolic.name = nullptr;
+			$3->type->symbolic.actuals = nullptr;
+			delete $3;
+		}
 	;
 
@@ -2380,4 +2413,5 @@
 	| declaration_specifier function_declarator with_clause_opt compound_statement
 		{
+			rebindForall( $1, $2 );
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
@@ -2406,4 +2440,5 @@
 	| declaration_specifier KR_function_declarator KR_declaration_list_opt with_clause_opt compound_statement
 		{
+			rebindForall( $1, $2 );
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			typedefTable.leaveScope();
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -779,5 +779,5 @@
 			return ! finalResults.empty();
 		}
-		
+
 		// iterate each current subresult
 		std::size_t genEnd = results.size();
@@ -913,6 +913,6 @@
 
 	template<typename OutputIterator>
-	void AlternativeFinder::makeFunctionAlternatives( const Alternative &func, 
-			FunctionType *funcType, const std::vector< AlternativeFinder > &args, 
+	void AlternativeFinder::makeFunctionAlternatives( const Alternative &func,
+			FunctionType *funcType, const std::vector< AlternativeFinder > &args,
 			OutputIterator out ) {
 		OpenVarSet funcOpenVars;
@@ -920,12 +920,12 @@
 		TypeEnvironment funcEnv( func.env );
 		makeUnifiableVars( funcType, funcOpenVars, funcNeed );
-		// add all type variables as open variables now so that those not used in the parameter 
+		// add all type variables as open variables now so that those not used in the parameter
 		// list are still considered open.
 		funcEnv.add( funcType->get_forall() );
-		
+
 		if ( targetType && ! targetType->isVoid() && ! funcType->get_returnVals().empty() ) {
 			// attempt to narrow based on expected target type
 			Type * returnType = funcType->get_returnVals().front()->get_type();
-			if ( ! unify( returnType, targetType, funcEnv, funcNeed, funcHave, funcOpenVars, 
+			if ( ! unify( returnType, targetType, funcEnv, funcNeed, funcHave, funcOpenVars,
 					indexer ) ) {
 				// unification failed, don't pursue this function alternative
@@ -1035,5 +1035,5 @@
 
 		std::vector< AlternativeFinder > argAlternatives;
-		findSubExprs( untypedExpr->begin_args(), untypedExpr->end_args(), 
+		findSubExprs( untypedExpr->begin_args(), untypedExpr->end_args(),
 			back_inserter( argAlternatives ) );
 
@@ -1065,5 +1065,5 @@
 						Alternative newFunc( *func );
 						referenceToRvalueConversion( newFunc.expr );
-						makeFunctionAlternatives( newFunc, function, argAlternatives, 
+						makeFunctionAlternatives( newFunc, function, argAlternatives,
 							std::back_inserter( candidates ) );
 					}
@@ -1074,9 +1074,9 @@
 							Alternative newFunc( *func );
 							referenceToRvalueConversion( newFunc.expr );
-							makeFunctionAlternatives( newFunc, function, argAlternatives, 
+							makeFunctionAlternatives( newFunc, function, argAlternatives,
 								std::back_inserter( candidates ) );
 						} // if
 					} // if
-				}			
+				}
 			} catch ( SemanticError &e ) {
 				errors.append( e );
@@ -1093,11 +1093,11 @@
 				try {
 					// check if type is a pointer to function
-					if ( PointerType* pointer = dynamic_cast<PointerType*>( 
+					if ( PointerType* pointer = dynamic_cast<PointerType*>(
 							funcOp->expr->get_result()->stripReferences() ) ) {
-						if ( FunctionType* function = 
+						if ( FunctionType* function =
 								dynamic_cast<FunctionType*>( pointer->get_base() ) ) {
 							Alternative newFunc( *funcOp );
 							referenceToRvalueConversion( newFunc.expr );
-							makeFunctionAlternatives( newFunc, function, argAlternatives, 
+							makeFunctionAlternatives( newFunc, function, argAlternatives,
 								std::back_inserter( candidates ) );
 						}
@@ -1138,12 +1138,15 @@
 		candidates.splice( candidates.end(), alternatives );
 
-		findMinCost( candidates.begin(), candidates.end(), std::back_inserter( alternatives ) );
+		// use a new list so that alternatives are not examined by addAnonConversions twice.
+		AltList winners;
+		findMinCost( candidates.begin(), candidates.end(), std::back_inserter( winners ) );
 
 		// function may return struct or union value, in which case we need to add alternatives for implicit
 		// conversions to each of the anonymous members, must happen after findMinCost since anon conversions
 		// are never the cheapest expression
-		for ( const Alternative & alt : alternatives ) {
+		for ( const Alternative & alt : winners ) {
 			addAnonConversions( alt );
 		}
+		alternatives.splice( alternatives.begin(), winners );
 
 		if ( alternatives.empty() && targetType && ! targetType->isVoid() ) {
Index: src/ResolvExpr/RenameVars.cc
===================================================================
--- src/ResolvExpr/RenameVars.cc	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/ResolvExpr/RenameVars.cc	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -29,5 +29,5 @@
 	RenameVars global_renamer;
 
-	RenameVars::RenameVars() : level( 0 ) {
+	RenameVars::RenameVars() : level( 0 ), resetCount( 0 ) {
 		mapStack.push_front( std::map< std::string, std::string >() );
 	}
@@ -35,4 +35,5 @@
 	void RenameVars::reset() {
 		level = 0;
+		resetCount++;
 	}
 
@@ -130,5 +131,5 @@
 			for ( Type::ForallList::iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) {
 				std::ostringstream output;
-				output << "_" << level << "_" << (*i)->get_name();
+				output << "_" << resetCount << "_" << level << "_" << (*i)->get_name();
 				std::string newname( output.str() );
 				mapStack.front()[ (*i)->get_name() ] = newname;
Index: src/ResolvExpr/RenameVars.h
===================================================================
--- src/ResolvExpr/RenameVars.h	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/ResolvExpr/RenameVars.h	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -48,5 +48,5 @@
 		void typeBefore( Type *type );
 		void typeAfter( Type *type );
-		int level;
+		int level, resetCount;
 		std::list< std::map< std::string, std::string > > mapStack;
 	};
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/SymTab/Validate.cc	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -423,4 +423,12 @@
 	}
 
+	void checkGenericParameters( ReferenceToType * inst ) {
+		for ( Expression * param : inst->parameters ) {
+			if ( ! dynamic_cast< TypeExpr * >( param ) ) {
+				throw SemanticError( "Expression parameters for generic types are currently unsupported: ", inst );
+			}
+		}
+	}
+
 	void LinkReferenceToTypes::postvisit( StructInstType *structInst ) {
 		StructDecl *st = local_indexer->lookupStruct( structInst->get_name() );
@@ -434,4 +442,5 @@
 			forwardStructs[ structInst->get_name() ].push_back( structInst );
 		} // if
+		checkGenericParameters( structInst );
 	}
 
@@ -446,4 +455,5 @@
 			forwardUnions[ unionInst->get_name() ].push_back( unionInst );
 		} // if
+		checkGenericParameters( unionInst );
 	}
 
@@ -525,5 +535,8 @@
 		// need to carry over the 'sized' status of each decl in the instance
 		for ( auto p : group_iterate( traitDecl->get_parameters(), traitInst->get_parameters() ) ) {
-			TypeExpr * expr = strict_dynamic_cast< TypeExpr * >( std::get<1>(p) );
+			TypeExpr * expr = dynamic_cast< TypeExpr * >( std::get<1>(p) );
+			if ( ! expr ) {
+				throw SemanticError( "Expression parameters for trait instances are currently unsupported: ", std::get<1>(p) );
+			}
 			if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( expr->get_type() ) ) {
 				TypeDecl * formalDecl = std::get<0>(p);
Index: src/benchmark/Makefile.am
===================================================================
--- src/benchmark/Makefile.am	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/benchmark/Makefile.am	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -23,4 +23,6 @@
 STATS    = ${TOOLSDIR}stat.py
 repeats  = 30
+TIME_FORMAT = "%E"
+PRINT_FORMAT = %20s: #Comments needed for spacing
 
 .NOTPARALLEL:
@@ -29,185 +31,4 @@
 
 all : ctxswitch$(EXEEXT) mutex$(EXEEXT) signal$(EXEEXT) waitfor$(EXEEXT) creation$(EXEEXT)
-
-bench$(EXEEXT) :
-	@for ccflags in "-debug" "-nodebug"; do \
-		echo ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -lrt bench.c;\
-		${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt bench.c;\
-		./a.out ; \
-	done ; \
-	rm -f ./a.out ;
-
-csv-data$(EXEEXT):
-	@${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=50000000 csv-data.c
-	@./a.out
-	@rm -f ./a.out
-
-## =========================================================================================================
-ctxswitch$(EXEEXT): \
-	ctxswitch-pthread.run		\
-	ctxswitch-cfa_coroutine.run	\
-	ctxswitch-cfa_thread.run	\
-	ctxswitch-upp_coroutine.run	\
-	ctxswitch-upp_thread.run
-
-ctxswitch-cfa_coroutine$(EXEEXT):
-	${CC}        ctxswitch/cfa_cor.c   -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-ctxswitch-cfa_thread$(EXEEXT):
-	${CC}        ctxswitch/cfa_thrd.c  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-ctxswitch-upp_coroutine$(EXEEXT):
-	u++          ctxswitch/upp_cor.cc  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-ctxswitch-upp_thread$(EXEEXT):
-	u++          ctxswitch/upp_thrd.cc -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-ctxswitch-pthread$(EXEEXT):
-	@BACKEND_CC@ ctxswitch/pthreads.c  -DBENCH_N=50000000  -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-## =========================================================================================================
-mutex$(EXEEXT) :\
-	mutex-function.run	\
-	mutex-pthread_lock.run	\
-	mutex-upp.run		\
-	mutex-cfa1.run		\
-	mutex-cfa2.run		\
-	mutex-cfa4.run
-
-mutex-function$(EXEEXT):
-	@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-pthread_lock$(EXEEXT):
-	@BACKEND_CC@ mutex/pthreads.c    -DBENCH_N=50000000    -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-upp$(EXEEXT):
-	u++          mutex/upp.cc        -DBENCH_N=50000000    -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-cfa1$(EXEEXT):
-	${CC}        mutex/cfa1.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-cfa2$(EXEEXT):
-	${CC}        mutex/cfa2.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-cfa4$(EXEEXT):
-	${CC}        mutex/cfa4.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-## =========================================================================================================
-signal$(EXEEXT) :\
-	signal-upp.run		\
-	signal-cfa1.run		\
-	signal-cfa2.run		\
-	signal-cfa4.run
-
-signal-upp$(EXEEXT):
-	u++          schedint/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-signal-cfa1$(EXEEXT):
-	${CC}        schedint/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-signal-cfa2$(EXEEXT):
-	${CC}        schedint/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-signal-cfa4$(EXEEXT):
-	${CC}        schedint/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-## =========================================================================================================
-waitfor$(EXEEXT) :\
-	waitfor-upp.run		\
-	waitfor-cfa1.run		\
-	waitfor-cfa2.run		\
-	waitfor-cfa4.run
-
-waitfor-upp$(EXEEXT):
-	u++          schedext/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-waitfor-cfa1$(EXEEXT):
-	${CC}        schedext/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-waitfor-cfa2$(EXEEXT):
-	${CC}        schedext/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-waitfor-cfa4$(EXEEXT):
-	${CC}        schedext/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-## =========================================================================================================
-creation$(EXEEXT) :\
-	creation-pthread.run			\
-	creation-cfa_coroutine.run		\
-	creation-cfa_coroutine_eager.run	\
-	creation-cfa_thread.run			\
-	creation-upp_coroutine.run		\
-	creation-upp_thread.run
-
-creation-cfa_coroutine$(EXEEXT):
-	${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation-cfa_coroutine_eager$(EXEEXT):
-	${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -DEAGER
-
-creation-cfa_thread$(EXEEXT):
-	${CC}        creation/cfa_thrd.c  -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation-upp_coroutine$(EXEEXT):
-	u++          creation/upp_cor.cc  -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation-upp_thread$(EXEEXT):
-	u++          creation/upp_thrd.cc -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation-pthread$(EXEEXT):
-	@BACKEND_CC@ creation/pthreads.c  -DBENCH_N=250000     -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-## =========================================================================================================
-
-compile$(EXEEXT) :\
-	compile-array$(EXEEXT)		\
-	compile-attributes$(EXEEXT)	\
-	compile-empty$(EXEEXT)  	\
-	compile-expression$(EXEEXT)	\
-	compile-io$(EXEEXT)		\
-	compile-monitor$(EXEEXT)	\
-	compile-operators$(EXEEXT)	\
-	compile-thread$(EXEEXT)		\
-	compile-typeof$(EXEEXT)
-
-
-compile-array$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/array.c
-
-compile-attributes$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/attributes.c
-
-compile-empty$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w compile/empty.c
-
-compile-expression$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/expression.c
-
-compile-io$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/io.c
-
-compile-monitor$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/monitor.c
-
-compile-operators$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/operators.c
-
-compile-thread$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/thread.c
-
-compile-typeof$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/typeof.c
-
-
-## =========================================================================================================
 
 %.run : %$(EXEEXT) ${REPEAT}
@@ -220,4 +41,204 @@
 	@rm -f a.out .result.log
 
+%.runquiet :
+	@+make $(basename $@)
+	@./a.out
+	@rm -f a.out
+
+%.make :
+	@printf "${PRINT_FORMAT}" $(basename $(subst compile-,,$@))
+	@+/usr/bin/time -f ${TIME_FORMAT} make $(basename $@) 2>&1
+
 ${REPEAT} :
 	@+make -C ${TOOLSDIR} repeat
+
+## =========================================================================================================
+
+jenkins$(EXEEXT):
+	@echo "{"
+	@echo -e '\t"githash": "'${githash}'",'
+	@echo -e '\t"arch": "'   ${arch}   '",'
+	@echo -e '\t"compile": {'
+	@+make compile TIME_FORMAT='%e,' PRINT_FORMAT='\t\t\"%s\" :'
+	@echo -e '\t\t"dummy" : {}'
+	@echo -e '\t},'
+	@echo -e '\t"ctxswitch": {'
+	@echo -en '\t\t"coroutine":'
+	@+make ctxswitch-cfa_coroutine.runquiet
+	@echo -en '\t\t,"thread":'
+	@+make ctxswitch-cfa_thread.runquiet
+	@echo -e '\t},'
+	@echo -e '\t"mutex": ['
+	@echo -en '\t\t'
+	@+make mutex-cfa1.runquiet
+	@echo -en '\t\t,'
+	@+make mutex-cfa2.runquiet
+	@echo -e '\t],'
+	@echo -e '\t"scheduling": ['
+	@echo -en '\t\t'
+	@+make signal-cfa1.runquiet
+	@echo -en '\t\t,'
+	@+make signal-cfa2.runquiet
+	@echo -en '\t\t,'
+	@+make waitfor-cfa1.runquiet
+	@echo -en '\t\t,'
+	@+make waitfor-cfa2.runquiet
+	@echo -e '\n\t],'
+	@echo -e '\t"epoch": ' $(shell date +%s)
+	@echo "}"
+
+## =========================================================================================================
+ctxswitch$(EXEEXT): \
+	ctxswitch-pthread.run		\
+	ctxswitch-cfa_coroutine.run	\
+	ctxswitch-cfa_thread.run	\
+	ctxswitch-upp_coroutine.run	\
+	ctxswitch-upp_thread.run
+
+ctxswitch-cfa_coroutine$(EXEEXT):
+	@${CC}        ctxswitch/cfa_cor.c   -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-cfa_thread$(EXEEXT):
+	@${CC}        ctxswitch/cfa_thrd.c  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-upp_coroutine$(EXEEXT):
+	@u++          ctxswitch/upp_cor.cc  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-upp_thread$(EXEEXT):
+	@u++          ctxswitch/upp_thrd.cc -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-pthread$(EXEEXT):
+	@@BACKEND_CC@ ctxswitch/pthreads.c  -DBENCH_N=50000000  -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+mutex$(EXEEXT) :\
+	mutex-function.run	\
+	mutex-pthread_lock.run	\
+	mutex-upp.run		\
+	mutex-cfa1.run		\
+	mutex-cfa2.run		\
+	mutex-cfa4.run
+
+mutex-function$(EXEEXT):
+	@@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-pthread_lock$(EXEEXT):
+	@@BACKEND_CC@ mutex/pthreads.c    -DBENCH_N=50000000    -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-upp$(EXEEXT):
+	@u++          mutex/upp.cc        -DBENCH_N=50000000    -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa1$(EXEEXT):
+	@${CC}        mutex/cfa1.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa2$(EXEEXT):
+	@${CC}        mutex/cfa2.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa4$(EXEEXT):
+	@${CC}        mutex/cfa4.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+signal$(EXEEXT) :\
+	signal-upp.run		\
+	signal-cfa1.run		\
+	signal-cfa2.run		\
+	signal-cfa4.run
+
+signal-upp$(EXEEXT):
+	@u++          schedint/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa1$(EXEEXT):
+	@${CC}        schedint/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa2$(EXEEXT):
+	@${CC}        schedint/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa4$(EXEEXT):
+	@${CC}        schedint/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+waitfor$(EXEEXT) :\
+	waitfor-upp.run		\
+	waitfor-cfa1.run		\
+	waitfor-cfa2.run		\
+	waitfor-cfa4.run
+
+waitfor-upp$(EXEEXT):
+	@u++          schedext/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa1$(EXEEXT):
+	@${CC}        schedext/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa2$(EXEEXT):
+	@${CC}        schedext/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa4$(EXEEXT):
+	@${CC}        schedext/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+creation$(EXEEXT) :\
+	creation-pthread.run			\
+	creation-cfa_coroutine.run		\
+	creation-cfa_coroutine_eager.run	\
+	creation-cfa_thread.run			\
+	creation-upp_coroutine.run		\
+	creation-upp_thread.run
+
+creation-cfa_coroutine$(EXEEXT):
+	@${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-cfa_coroutine_eager$(EXEEXT):
+	@${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -DEAGER
+
+creation-cfa_thread$(EXEEXT):
+	@${CC}        creation/cfa_thrd.c  -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-upp_coroutine$(EXEEXT):
+	@u++          creation/upp_cor.cc  -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-upp_thread$(EXEEXT):
+	@u++          creation/upp_thrd.cc -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-pthread$(EXEEXT):
+	@@BACKEND_CC@ creation/pthreads.c  -DBENCH_N=250000     -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+## =========================================================================================================
+
+compile$(EXEEXT) :\
+	compile-array.make	\
+	compile-attributes.make	\
+	compile-empty.make  	\
+	compile-expression.make	\
+	compile-io.make		\
+	compile-monitor.make	\
+	compile-operators.make	\
+	compile-typeof.make
+
+
+compile-array$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/array.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-attributes$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/attributes.c	@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-empty$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w compile/empty.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-expression$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/expression.c	@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-io$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/io.c			@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-monitor$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/monitor.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-operators$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/operators.c	@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-thread$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/thread.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-typeof$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/typeof.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
Index: src/benchmark/Makefile.in
===================================================================
--- src/benchmark/Makefile.in	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/benchmark/Makefile.in	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -253,4 +253,6 @@
 STATS = ${TOOLSDIR}stat.py
 repeats = 30
+TIME_FORMAT = "%E"
+PRINT_FORMAT = %20s: #Comments needed for spacing
 all: all-am
 
@@ -446,179 +448,4 @@
 all : ctxswitch$(EXEEXT) mutex$(EXEEXT) signal$(EXEEXT) waitfor$(EXEEXT) creation$(EXEEXT)
 
-bench$(EXEEXT) :
-	@for ccflags in "-debug" "-nodebug"; do \
-		echo ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -lrt bench.c;\
-		${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt bench.c;\
-		./a.out ; \
-	done ; \
-	rm -f ./a.out ;
-
-csv-data$(EXEEXT):
-	@${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=50000000 csv-data.c
-	@./a.out
-	@rm -f ./a.out
-
-ctxswitch$(EXEEXT): \
-	ctxswitch-pthread.run		\
-	ctxswitch-cfa_coroutine.run	\
-	ctxswitch-cfa_thread.run	\
-	ctxswitch-upp_coroutine.run	\
-	ctxswitch-upp_thread.run
-
-ctxswitch-cfa_coroutine$(EXEEXT):
-	${CC}        ctxswitch/cfa_cor.c   -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-ctxswitch-cfa_thread$(EXEEXT):
-	${CC}        ctxswitch/cfa_thrd.c  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-ctxswitch-upp_coroutine$(EXEEXT):
-	u++          ctxswitch/upp_cor.cc  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-ctxswitch-upp_thread$(EXEEXT):
-	u++          ctxswitch/upp_thrd.cc -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-ctxswitch-pthread$(EXEEXT):
-	@BACKEND_CC@ ctxswitch/pthreads.c  -DBENCH_N=50000000  -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex$(EXEEXT) :\
-	mutex-function.run	\
-	mutex-pthread_lock.run	\
-	mutex-upp.run		\
-	mutex-cfa1.run		\
-	mutex-cfa2.run		\
-	mutex-cfa4.run
-
-mutex-function$(EXEEXT):
-	@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-pthread_lock$(EXEEXT):
-	@BACKEND_CC@ mutex/pthreads.c    -DBENCH_N=50000000    -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-upp$(EXEEXT):
-	u++          mutex/upp.cc        -DBENCH_N=50000000    -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-cfa1$(EXEEXT):
-	${CC}        mutex/cfa1.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-cfa2$(EXEEXT):
-	${CC}        mutex/cfa2.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-mutex-cfa4$(EXEEXT):
-	${CC}        mutex/cfa4.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-signal$(EXEEXT) :\
-	signal-upp.run		\
-	signal-cfa1.run		\
-	signal-cfa2.run		\
-	signal-cfa4.run
-
-signal-upp$(EXEEXT):
-	u++          schedint/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-signal-cfa1$(EXEEXT):
-	${CC}        schedint/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-signal-cfa2$(EXEEXT):
-	${CC}        schedint/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-signal-cfa4$(EXEEXT):
-	${CC}        schedint/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-waitfor$(EXEEXT) :\
-	waitfor-upp.run		\
-	waitfor-cfa1.run		\
-	waitfor-cfa2.run		\
-	waitfor-cfa4.run
-
-waitfor-upp$(EXEEXT):
-	u++          schedext/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-waitfor-cfa1$(EXEEXT):
-	${CC}        schedext/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-waitfor-cfa2$(EXEEXT):
-	${CC}        schedext/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-waitfor-cfa4$(EXEEXT):
-	${CC}        schedext/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation$(EXEEXT) :\
-	creation-pthread.run			\
-	creation-cfa_coroutine.run		\
-	creation-cfa_coroutine_eager.run	\
-	creation-cfa_thread.run			\
-	creation-upp_coroutine.run		\
-	creation-upp_thread.run
-
-creation-cfa_coroutine$(EXEEXT):
-	${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation-cfa_coroutine_eager$(EXEEXT):
-	${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -DEAGER
-
-creation-cfa_thread$(EXEEXT):
-	${CC}        creation/cfa_thrd.c  -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation-upp_coroutine$(EXEEXT):
-	u++          creation/upp_cor.cc  -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation-upp_thread$(EXEEXT):
-	u++          creation/upp_thrd.cc -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-creation-pthread$(EXEEXT):
-	@BACKEND_CC@ creation/pthreads.c  -DBENCH_N=250000     -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
-
-compile$(EXEEXT) :\
-	compile-array$(EXEEXT)		\
-	compile-attributes$(EXEEXT)	\
-	compile-empty$(EXEEXT)  	\
-	compile-expression$(EXEEXT)	\
-	compile-io$(EXEEXT)		\
-	compile-monitor$(EXEEXT)	\
-	compile-operators$(EXEEXT)	\
-	compile-thread$(EXEEXT)		\
-	compile-typeof$(EXEEXT)		\
-	compile-vector_test$(EXEEXT)
-
-compile-array$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/array.c
-
-compile-attributes$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/attributes.c
-
-compile-empty$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w compile/empty.c
-
-compile-expression$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/expression.c
-
-compile-io$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/io.c
-
-compile-monitor$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/monitor.c
-
-compile-operators$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/operators.c
-
-compile-thread$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/thread.c
-
-compile-typeof$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/typeof.c
-
-compile-vector_test$(EXEEXT):
-	@printf '%20s\t' $(subst compile-,,$@)
-	@/usr/bin/time -f "%E" ${CC} -quiet -fsyntax-only -w ../tests/vector_test.c
-
 %.run : %$(EXEEXT) ${REPEAT}
 	@rm -f .result.log
@@ -630,6 +457,195 @@
 	@rm -f a.out .result.log
 
+%.runquiet :
+	@+make $(basename $@)
+	@./a.out
+	@rm -f a.out
+
+%.make :
+	@printf "${PRINT_FORMAT}" $(basename $(subst compile-,,$@))
+	@+/usr/bin/time -f ${TIME_FORMAT} make $(basename $@) 2>&1
+
 ${REPEAT} :
 	@+make -C ${TOOLSDIR} repeat
+
+jenkins$(EXEEXT):
+	@echo "{"
+	@echo -e '\t"githash": "'${githash}'",'
+	@echo -e '\t"arch": "'   ${arch}   '",'
+	@echo -e '\t"compile": {'
+	@+make compile TIME_FORMAT='%e,' PRINT_FORMAT='\t\t\"%s\" :'
+	@echo -e '\t\t"dummy" : {}'
+	@echo -e '\t},'
+	@echo -e '\t"ctxswitch": {'
+	@echo -en '\t\t"coroutine":'
+	@+make ctxswitch-cfa_coroutine.runquiet
+	@echo -en '\t\t,"thread":'
+	@+make ctxswitch-cfa_thread.runquiet
+	@echo -e '\t},'
+	@echo -e '\t"mutex": ['
+	@echo -en '\t\t'
+	@+make mutex-cfa1.runquiet
+	@echo -en '\t\t,'
+	@+make mutex-cfa2.runquiet
+	@echo -e '\t],'
+	@echo -e '\t"scheduling": ['
+	@echo -en '\t\t'
+	@+make signal-cfa1.runquiet
+	@echo -en '\t\t,'
+	@+make signal-cfa2.runquiet
+	@echo -en '\t\t,'
+	@+make waitfor-cfa1.runquiet
+	@echo -en '\t\t,'
+	@+make waitfor-cfa2.runquiet
+	@echo -e '\n\t],'
+	@echo -e '\t"epoch": ' $(shell date +%s)
+	@echo "}"
+
+ctxswitch$(EXEEXT): \
+	ctxswitch-pthread.run		\
+	ctxswitch-cfa_coroutine.run	\
+	ctxswitch-cfa_thread.run	\
+	ctxswitch-upp_coroutine.run	\
+	ctxswitch-upp_thread.run
+
+ctxswitch-cfa_coroutine$(EXEEXT):
+	@${CC}        ctxswitch/cfa_cor.c   -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-cfa_thread$(EXEEXT):
+	@${CC}        ctxswitch/cfa_thrd.c  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-upp_coroutine$(EXEEXT):
+	@u++          ctxswitch/upp_cor.cc  -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-upp_thread$(EXEEXT):
+	@u++          ctxswitch/upp_thrd.cc -DBENCH_N=50000000  -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+ctxswitch-pthread$(EXEEXT):
+	@@BACKEND_CC@ ctxswitch/pthreads.c  -DBENCH_N=50000000  -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex$(EXEEXT) :\
+	mutex-function.run	\
+	mutex-pthread_lock.run	\
+	mutex-upp.run		\
+	mutex-cfa1.run		\
+	mutex-cfa2.run		\
+	mutex-cfa4.run
+
+mutex-function$(EXEEXT):
+	@@BACKEND_CC@ mutex/function.c    -DBENCH_N=500000000   -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-pthread_lock$(EXEEXT):
+	@@BACKEND_CC@ mutex/pthreads.c    -DBENCH_N=50000000    -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-upp$(EXEEXT):
+	@u++          mutex/upp.cc        -DBENCH_N=50000000    -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa1$(EXEEXT):
+	@${CC}        mutex/cfa1.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa2$(EXEEXT):
+	@${CC}        mutex/cfa2.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+mutex-cfa4$(EXEEXT):
+	@${CC}        mutex/cfa4.c        -DBENCH_N=5000000     -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal$(EXEEXT) :\
+	signal-upp.run		\
+	signal-cfa1.run		\
+	signal-cfa2.run		\
+	signal-cfa4.run
+
+signal-upp$(EXEEXT):
+	@u++          schedint/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa1$(EXEEXT):
+	@${CC}        schedint/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa2$(EXEEXT):
+	@${CC}        schedint/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+signal-cfa4$(EXEEXT):
+	@${CC}        schedint/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor$(EXEEXT) :\
+	waitfor-upp.run		\
+	waitfor-cfa1.run		\
+	waitfor-cfa2.run		\
+	waitfor-cfa4.run
+
+waitfor-upp$(EXEEXT):
+	@u++          schedext/upp.cc     -DBENCH_N=5000000     -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa1$(EXEEXT):
+	@${CC}        schedext/cfa1.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa2$(EXEEXT):
+	@${CC}        schedext/cfa2.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+waitfor-cfa4$(EXEEXT):
+	@${CC}        schedext/cfa4.c     -DBENCH_N=500000      -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation$(EXEEXT) :\
+	creation-pthread.run			\
+	creation-cfa_coroutine.run		\
+	creation-cfa_coroutine_eager.run	\
+	creation-cfa_thread.run			\
+	creation-upp_coroutine.run		\
+	creation-upp_thread.run
+
+creation-cfa_coroutine$(EXEEXT):
+	@${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-cfa_coroutine_eager$(EXEEXT):
+	@${CC}        creation/cfa_cor.c   -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags} -DEAGER
+
+creation-cfa_thread$(EXEEXT):
+	@${CC}        creation/cfa_thrd.c  -DBENCH_N=10000000   -I. -nodebug -lrt -quiet @CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-upp_coroutine$(EXEEXT):
+	@u++          creation/upp_cor.cc  -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-upp_thread$(EXEEXT):
+	@u++          creation/upp_thrd.cc -DBENCH_N=50000000   -I. -nodebug -lrt -quiet             ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+creation-pthread$(EXEEXT):
+	@@BACKEND_CC@ creation/pthreads.c  -DBENCH_N=250000     -I. -lrt -pthread                    ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile$(EXEEXT) :\
+	compile-array.make	\
+	compile-attributes.make	\
+	compile-empty.make  	\
+	compile-expression.make	\
+	compile-io.make		\
+	compile-monitor.make	\
+	compile-operators.make	\
+	compile-typeof.make
+
+compile-array$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/array.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-attributes$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/attributes.c	@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-empty$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w compile/empty.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-expression$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/expression.c	@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-io$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/io.c			@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-monitor$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/monitor.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-operators$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/operators.c	@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-thread$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/thread.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
+
+compile-typeof$(EXEEXT):
+	@${CC} -nodebug -quiet -fsyntax-only -w ../tests/typeof.c		@CFA_FLAGS@ ${AM_CFLAGS} ${CFLAGS} ${ccflags}
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
Index: src/benchmark/bench.c
===================================================================
--- src/benchmark/bench.c	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ 	(revision )
@@ -1,220 +1,0 @@
-
-#include <fstream>
-#include <stdlib>
-#include <thread>
-
-#include "bench.h"
-
-//=======================================
-// time struct
-//=======================================
-
-// prevent dead-code removal
-struct StructDummy {
-	volatile int i;
-};
-
-void ?{}(StructDummy * this) __attribute__(( noinline )) {
-	this->i = 2;
-}
-
-int get_i(StructDummy * this) {
-	return this->i;
-}
-
-forall( dtype T | { int get_i(T*); } )
-int bidirectional( StructDummy * this ) __attribute__(( noinline )) {
-	return get_i( this );
-}
-
-void BlockStructCreateDelete( int N ) {
-    long long int StartTime, EndTime;
-
-    StartTime = Time();
-    for ( int i = 0; i < N; i += 1 ) {
-	StructDummy dummy;
-    }
-    EndTime = Time();
-    sout | "\t " | ( EndTime - StartTime ) / N;
-}
-
-void DynamicStructCreateDelete( int N ) {
-    long long int StartTime, EndTime;
-
-    StartTime = Time();
-    for ( int i = 0; i < N; i += 1 ) {
-	StructDummy *dummy = new();
-	delete(dummy);
-    }
-    EndTime = Time();
-    sout | "\t " | ( EndTime - StartTime ) / N;
-}
-
-void StructBidirectional( int N ) {
-    long long int StartTime, EndTime;
-    StructDummy dummy;
-    volatile int rv __attribute__(( unused ));
-
-    StartTime = Time();
-    for ( int i = 0; i < N; i += 1 ) {
-	rv = bidirectional( &dummy ); 
-    }
-    EndTime = Time();
-    sout | "\t " | ( EndTime - StartTime ) / N;
-}
-
-//=======================================
-// time coroutine
-//=======================================
-
-coroutine CoroutineDummy {};
-void main(CoroutineDummy * this) {}
-
-void ?{}(CoroutineDummy * this) {
-	prime(this);
-}
-
-void BlockCoroutineCreateDelete( int N ) {
-    long long int StartTime, EndTime;
-
-    StartTime = Time();
-    for ( int i = 0; i < N; i += 1 ) {
-	CoroutineDummy dummy;
-    }
-    EndTime = Time();
-    sout | "\t " | ( EndTime - StartTime ) / N;
-}
-
-void DynamicCoroutineCreateDelete( int N ) {
-    long long int StartTime, EndTime;
-
-    StartTime = Time();
-    for ( int i = 0; i < N; i += 1 ) {
-	CoroutineDummy * dummy = new();
-	delete(dummy);
-    }
-    EndTime = Time();
-    sout | "\t " | ( EndTime - StartTime ) / N;
-}
-
-coroutine CoroutineResume {
-    int N;
-};
-
-void ?{}(CoroutineResume* this, int N) {
-      this->N = N;
-	prime(this);
-}
-
-void main(CoroutineResume* this) {
-	for ( int i = 1; i <= this->N; i += 1 ) {
-		suspend();
-	}
-}
-
-void resumer(CoroutineResume* this) {
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for ( int i = 1; i <= this->N; i += 1 ) {
-		resume(this);
-	}
-	EndTime = Time();
-	sout | "\t " | ( EndTime - StartTime ) / this->N;
-}
-
-//=======================================
-// time task
-//=======================================
-
-thread ThreadDummy {};
-void main(ThreadDummy * this) {}
-
-void BlockTaskCreateDelete( int N ) {
-    long long int StartTime, EndTime;
-
-    StartTime = Time();
-    for ( int i = 0; i < N; i += 1 ) {
-	scoped(ThreadDummy) dummy;
-    }
-    EndTime = Time();
-    sout | "\t " | ( EndTime - StartTime ) / N;
-}
-
-void DynamicTaskCreateDelete( int N ) {
-    long long int StartTime, EndTime;
-
-    StartTime = Time();
-    for ( int i = 0; i < N; i += 1 ) {
-	scoped(ThreadDummy) * dummy = new();
-	delete(dummy);
-    }
-    EndTime = Time();
-    sout | "\t " | ( EndTime - StartTime ) / N;
-}
-
-thread ContextSwitch {
-    int N;
-    long long result;
-};
-
-void main(ContextSwitch * this) {    
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for ( int i = 1; i <= this->N; i += 1 ) {
-	    yield();
-	} // for
-	EndTime = Time();
-	this->result = ( EndTime - StartTime ) / this->N;
-}
-
-void ?{}(ContextSwitch * this, int N) {
-	this->N = N;
-}
-
-void ^?{}(ContextSwitch * this) {
-	sout | "\t " | this->result;
-}
-
-//=======================================
-// benchmark driver
-//=======================================
-
-
-int main() {
-	const int NoOfTimes =
-#if defined( __U_DEBUG__ )				// takes longer so run fewer iterations
-	100000;
-#else
-	1000000;
-#endif // __U_DEBUG__
-
-	sout | "\t\tcreate\tcreate\tcall/" | endl;
-	sout | "(nsecs)";
-	sout | "\t\tdelete/\tdelete/\tctx" | endl;
-	sout | "\t\tblock\tdynamic\tcycle" | endl;
-
-	sout | "object\t";
-	BlockStructCreateDelete( NoOfTimes );
-	DynamicStructCreateDelete( NoOfTimes );
-	StructBidirectional( NoOfTimes );
-	sout | endl;
-
-	sout | "coroutine";
-	BlockCoroutineCreateDelete( NoOfTimes );
-	DynamicCoroutineCreateDelete( NoOfTimes );
-	{
-		CoroutineResume resumer = { NoOfTimes };
-		resumer(&resumer);
-	}
-	sout | endl;
-
-	sout | "task\t";
-	BlockTaskCreateDelete( NoOfTimes );
-	DynamicTaskCreateDelete( NoOfTimes );
-	{
-		ContextSwitch dummy = { (int)NoOfTimes };		// context switch
-	}
-	sout | "\t" | endl;
-}
Index: src/benchmark/csv-data.c
===================================================================
--- src/benchmark/csv-data.c	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ 	(revision )
@@ -1,201 +1,0 @@
-#include <fstream>
-#include <monitor>
-#include <stdlib>
-#include <thread>
-
-#include "bench.h"
-
-coroutine GreatSuspender {};
-
-void ?{}( GreatSuspender & this ) {
-	prime(this);
-}
-
-void main( GreatSuspender & this )
-{
-	while( true ) {
-		suspend();
-	}
-}
-
-void resumer( GreatSuspender * this, const unsigned int NoOfTimes ) {
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		resume( *this );
-	}
-}
-
-//-----------------------------------------------------------------------------
-// coroutine context switch
-long long int measure_coroutine() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-
-	GreatSuspender s;
-
-	StartTime = Time();
-	resumer( &s, NoOfTimes );
-	EndTime = Time();
-
-	return ( EndTime - StartTime ) / NoOfTimes;
-}
-
-//-----------------------------------------------------------------------------
-// thread context switch
-long long int measure_thread() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		yield();
-	}
-	EndTime = Time();
-
-	return ( EndTime - StartTime ) / NoOfTimes;
-}
-
-//-----------------------------------------------------------------------------
-// single monitor entry
-monitor mon_t {};
-void dummy( mon_t & mutex m ) {}
-
-long long int measure_1_monitor_entry() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-	mon_t mon;
-
-	StartTime = Time();
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		dummy( mon );
-	}
-	EndTime = Time();
-
-	return ( EndTime - StartTime ) / NoOfTimes;
-}
-
-//-----------------------------------------------------------------------------
-// multi monitor entry
-void dummy( mon_t & mutex m1,  mon_t & mutex m2 ) {}
-
-long long int measure_2_monitor_entry() {
-	const unsigned int NoOfTimes = N;
-	long long int StartTime, EndTime;
-	mon_t mon1, mon2;
-
-	StartTime = Time();
-	for ( volatile unsigned int i = 0; i < NoOfTimes; i += 1 ) {
-		dummy( mon1, mon2 );
-	}
-	EndTime = Time();
-
-	return ( EndTime - StartTime ) / NoOfTimes;
-}
-
-//-----------------------------------------------------------------------------
-// single internal sched entry
-mon_t mon1;
-
-condition cond1a;
-condition cond1b;
-
-thread thrd1a { long long int * out; };
-thread thrd1b {};
-
-void ?{}( thrd1a & this, long long int * out ) {
-	this.out = out;
-}
-
-void side1A( mon_t & mutex a, long long int * out ) {
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for( int i = 0;; i++ ) {
-		signal(cond1a);
-		if( i > N ) break;
-		wait(cond1b);
-	}
-	EndTime = Time();
-
-	*out = ( EndTime - StartTime ) / N;
-}
-
-void side1B( mon_t & mutex a ) {
-	for( int i = 0;; i++ ) {
-		signal(cond1b);
-		if( i > N ) break;
-		wait(cond1a);
-	}
-}
-
-void main( thrd1a & this ) { side1A( mon1, this.out ); }
-void main( thrd1b & this ) { side1B( mon1 ); }
-
-long long int measure_1_sched_int() {
-	long long int t;
-	{
-		thrd1a a = { &t };
-		thrd1b b;
-	}
-	return t;
-}
-
-//-----------------------------------------------------------------------------
-// multi internal sched entry
-mon_t mon2;
-
-condition cond2a;
-condition cond2b;
-
-thread thrd2a { long long int * out; };
-thread thrd2b {};
-
-void ?{}( thrd2a & this, long long int * out ) {
-	this.out = out;
-}
-
-void side2A( mon_t & mutex a, mon_t & mutex b, long long int * out ) {
-	long long int StartTime, EndTime;
-
-	StartTime = Time();
-	for( int i = 0;; i++ ) {
-		signal(cond2a);
-		if( i > N ) break;
-		wait(cond2b);
-	}
-	EndTime = Time();
-
-	*out = ( EndTime - StartTime ) / N;
-}
-
-void side2B( mon_t & mutex a, mon_t & mutex b ) {
-	for( int i = 0;; i++ ) {
-		signal(cond2b);
-		if( i > N ) break;
-		wait(cond2a);
-	}
-}
-
-void main( thrd2a & this ) { side2A( mon1, mon2, this.out ); }
-void main( thrd2b & this ) { side2B( mon1, mon2 ); }
-
-long long int measure_2_sched_int() {
-	long long int t;
-	{
-		thrd2a a = { &t };
-		thrd2b b;
-	}
-	return t;
-}
-
-//-----------------------------------------------------------------------------
-// main loop
-int main()
-{
-	sout | time(NULL) | ',';
-	sout | measure_coroutine() | ',';
-	sout | measure_thread() | ',';
-	sout | measure_1_monitor_entry() | ',';
-	sout | measure_2_monitor_entry() | ',';
-	sout | measure_1_sched_int() | ',';
-	sout | measure_2_sched_int() | endl;
-}
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/main.cc	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -206,5 +206,5 @@
 			FILE * extras = fopen( libcfap | treep ? "../prelude/extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
 			assertf( extras, "cannot open extras.cf\n" );
-			parse( extras, LinkageSpec::C );
+			parse( extras, LinkageSpec::BuiltinC );
 
 			if ( ! libcfap ) {
Index: src/tests/.expect/32/KRfunctions.txt
===================================================================
--- src/tests/.expect/32/KRfunctions.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/32/KRfunctions.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 signed int __f0__Fi_iPCii__1(signed int __a__i_1, const signed int *__b__PCi_1, signed int __c__i_1){
     __attribute__ ((unused)) signed int ___retval_f0__i_1;
Index: src/tests/.expect/32/attributes.txt
===================================================================
--- src/tests/.expect/32/attributes.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/32/attributes.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 signed int __la__Fi___1(){
     __attribute__ ((unused)) signed int ___retval_la__i_1;
Index: src/tests/.expect/32/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/32/declarationSpecifier.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/32/declarationSpecifier.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 volatile const signed short int __x1__CVs_1;
 static volatile const signed short int __x2__CVs_1;
@@ -701,10 +695,4 @@
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 static inline signed int invoke_main(signed int argc, char **argv, char **envp);
 signed int main(signed int __argc__i_1, char **__argv__PPc_1, char **__envp__PPc_1){
Index: src/tests/.expect/32/extension.txt
===================================================================
--- src/tests/.expect/32/extension.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/32/extension.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 __extension__ signed int __a__i_1;
 __extension__ signed int __b__i_1;
Index: src/tests/.expect/32/gccExtensions.txt
===================================================================
--- src/tests/.expect/32/gccExtensions.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/32/gccExtensions.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 extern signed int __x__i_1 asm ( "xx" );
 signed int __main__Fi_iPPCc__1(signed int __argc__i_1, const char **__argv__PPCc_1){
@@ -174,10 +168,4 @@
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 static inline signed int invoke_main(signed int argc, char **argv, char **envp);
 signed int main(signed int __argc__i_1, char **__argv__PPc_1, char **__envp__PPc_1){
Index: src/tests/.expect/32/literals.txt
===================================================================
--- src/tests/.expect/32/literals.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/32/literals.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 void __for_each__A0_2_0_0____operator_assign__PFd0_Rd0d0____constructor__PF_Rd0____constructor__PF_Rd0d0____destructor__PF_Rd0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_preincr__PFd0_Rd0____operator_predecr__PFd0_Rd0____operator_equal__PFi_d0d0____operator_notequal__PFi_d0d0____operator_deref__PFRd1_d0__F_d0d0PF_d1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object0)(), void *__anonymous_object1), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object2)(), void *__anonymous_object3), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object4)(), void *__anonymous_object5, void *__anonymous_object6), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object7)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object8), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object9)(), void *__anonymous_object10, void *__anonymous_object11), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object12)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object13, void *__anonymous_object14), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object15)(), void *__anonymous_object16, void *__anonymous_object17), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object18)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object19, void *__anonymous_object20), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object21, void *__anonymous_object22), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object23), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object24, void *__anonymous_object25), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object26), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object27, void *__anonymous_object28), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object29), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object30, void *__anonymous_object31), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object32), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object33), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object34), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object35, void *__anonymous_object36), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object37, void *__anonymous_object38), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object39), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object40));
 void __for_each_reverse__A0_2_0_0____operator_assign__PFd0_Rd0d0____constructor__PF_Rd0____constructor__PF_Rd0d0____destructor__PF_Rd0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_preincr__PFd0_Rd0____operator_predecr__PFd0_Rd0____operator_equal__PFi_d0d0____operator_notequal__PFi_d0d0____operator_deref__PFRd1_d0__F_d0d0PF_d1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object41)(), void *__anonymous_object42), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object43)(), void *__anonymous_object44), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object45)(), void *__anonymous_object46, void *__anonymous_object47), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object48)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object49), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object50)(), void *__anonymous_object51, void *__anonymous_object52), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object53)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object54, void *__anonymous_object55), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object56)(), void *__anonymous_object57, void *__anonymous_object58), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object59)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object60, void *__anonymous_object61), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object62, void *__anonymous_object63), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object64), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object65, void *__anonymous_object66), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object67), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object68, void *__anonymous_object69), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object70), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object71, void *__anonymous_object72), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object73), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object74), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object75), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object76, void *__anonymous_object77), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object78, void *__anonymous_object79), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object80), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object81));
@@ -1377,10 +1371,4 @@
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi___1(); }
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 static inline signed int invoke_main(signed int argc, char **argv, char **envp);
 signed int main(signed int __argc__i_1, char **__argv__PPc_1, char **__envp__PPc_1){
Index: src/tests/.expect/64/KRfunctions.txt
===================================================================
--- src/tests/.expect/64/KRfunctions.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/64/KRfunctions.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 signed int __f0__Fi_iPCii__1(signed int __a__i_1, const signed int *__b__PCi_1, signed int __c__i_1){
     __attribute__ ((unused)) signed int ___retval_f0__i_1;
Index: src/tests/.expect/64/attributes.txt
===================================================================
--- src/tests/.expect/64/attributes.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/64/attributes.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 signed int __la__Fi___1(){
     __attribute__ ((unused)) signed int ___retval_la__i_1;
Index: src/tests/.expect/64/declarationSpecifier.txt
===================================================================
--- src/tests/.expect/64/declarationSpecifier.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/64/declarationSpecifier.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 volatile const signed short int __x1__CVs_1;
 static volatile const signed short int __x2__CVs_1;
@@ -701,10 +695,4 @@
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 static inline signed int invoke_main(signed int argc, char **argv, char **envp);
 signed int main(signed int __argc__i_1, char **__argv__PPc_1, char **__envp__PPc_1){
Index: src/tests/.expect/64/extension.txt
===================================================================
--- src/tests/.expect/64/extension.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/64/extension.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 __extension__ signed int __a__i_1;
 __extension__ signed int __b__i_1;
Index: src/tests/.expect/64/gccExtensions.txt
===================================================================
--- src/tests/.expect/64/gccExtensions.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/64/gccExtensions.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 extern signed int __x__i_1 asm ( "xx" );
 signed int __main__Fi_iPPCc__1(signed int __argc__i_1, const char **__argv__PPCc_1){
@@ -174,10 +168,4 @@
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 static inline signed int invoke_main(signed int argc, char **argv, char **envp);
 signed int main(signed int __argc__i_1, char **__argv__PPc_1, char **__envp__PPc_1){
Index: src/tests/.expect/64/literals.txt
===================================================================
--- src/tests/.expect/64/literals.txt	(revision 403b388ef1aea12eed0de3821475c7367022951e)
+++ src/tests/.expect/64/literals.txt	(revision a94b8291fd5d45ed741b2c85713c868ddc3b2bbc)
@@ -1,8 +1,2 @@
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 void __for_each__A0_2_0_0____operator_assign__PFd0_Rd0d0____constructor__PF_Rd0____constructor__PF_Rd0d0____destructor__PF_Rd0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_preincr__PFd0_Rd0____operator_predecr__PFd0_Rd0____operator_equal__PFi_d0d0____operator_notequal__PFi_d0d0____operator_deref__PFRd1_d0__F_d0d0PF_d1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object0)(), void *__anonymous_object1), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object2)(), void *__anonymous_object3), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object4)(), void *__anonymous_object5, void *__anonymous_object6), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object7)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object8), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object9)(), void *__anonymous_object10, void *__anonymous_object11), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object12)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object13, void *__anonymous_object14), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object15)(), void *__anonymous_object16, void *__anonymous_object17), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object18)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object19, void *__anonymous_object20), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object21, void *__anonymous_object22), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object23), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object24, void *__anonymous_object25), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object26), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object27, void *__anonymous_object28), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object29), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object30, void *__anonymous_object31), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object32), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object33), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object34), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object35, void *__anonymous_object36), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object37, void *__anonymous_object38), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object39), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object40));
 void __for_each_reverse__A0_2_0_0____operator_assign__PFd0_Rd0d0____constructor__PF_Rd0____constructor__PF_Rd0d0____destructor__PF_Rd0____operator_assign__PFd1_Rd1d1____constructor__PF_Rd1____constructor__PF_Rd1d1____destructor__PF_Rd1____operator_preincr__PFd0_Rd0____operator_predecr__PFd0_Rd0____operator_equal__PFi_d0d0____operator_notequal__PFi_d0d0____operator_deref__PFRd1_d0__F_d0d0PF_d1___1(__attribute__ ((unused)) void (*_adapterF_9telt_type__P)(void (*__anonymous_object41)(), void *__anonymous_object42), __attribute__ ((unused)) void *(*_adapterFP9telt_type_14titerator_type_M_P)(void (*__anonymous_object43)(), void *__anonymous_object44), __attribute__ ((unused)) signed int (*_adapterFi_14titerator_type14titerator_type_M_PP)(void (*__anonymous_object45)(), void *__anonymous_object46, void *__anonymous_object47), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type_P_M)(void (*__anonymous_object48)(), __attribute__ ((unused)) void *___retval__operator_preincr__14titerator_type_1, void *__anonymous_object49), __attribute__ ((unused)) void (*_adapterF_P9telt_type9telt_type__MP)(void (*__anonymous_object50)(), void *__anonymous_object51, void *__anonymous_object52), __attribute__ ((unused)) void (*_adapterF9telt_type_P9telt_type9telt_type_P_MP)(void (*__anonymous_object53)(), __attribute__ ((unused)) void *___retval__operator_assign__9telt_type_1, void *__anonymous_object54, void *__anonymous_object55), __attribute__ ((unused)) void (*_adapterF_P14titerator_type14titerator_type__MP)(void (*__anonymous_object56)(), void *__anonymous_object57, void *__anonymous_object58), __attribute__ ((unused)) void (*_adapterF14titerator_type_P14titerator_type14titerator_type_P_MP)(void (*__anonymous_object59)(), __attribute__ ((unused)) void *___retval__operator_assign__14titerator_type_1, void *__anonymous_object60, void *__anonymous_object61), __attribute__ ((unused)) unsigned long int _sizeof_14titerator_type, __attribute__ ((unused)) unsigned long int _alignof_14titerator_type, __attribute__ ((unused)) unsigned long int _sizeof_9telt_type, __attribute__ ((unused)) unsigned long int _alignof_9telt_type, __attribute__ ((unused)) void *(*___operator_assign__PF14titerator_type_R14titerator_type14titerator_type__1)(void *__anonymous_object62, void *__anonymous_object63), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type__1)(void *__anonymous_object64), __attribute__ ((unused)) void (*___constructor__PF_R14titerator_type14titerator_type__1)(void *__anonymous_object65, void *__anonymous_object66), __attribute__ ((unused)) void (*___destructor__PF_R14titerator_type__1)(void *__anonymous_object67), __attribute__ ((unused)) void *(*___operator_assign__PF9telt_type_R9telt_type9telt_type__1)(void *__anonymous_object68, void *__anonymous_object69), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type__1)(void *__anonymous_object70), __attribute__ ((unused)) void (*___constructor__PF_R9telt_type9telt_type__1)(void *__anonymous_object71, void *__anonymous_object72), __attribute__ ((unused)) void (*___destructor__PF_R9telt_type__1)(void *__anonymous_object73), __attribute__ ((unused)) void *(*___operator_preincr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object74), __attribute__ ((unused)) void *(*___operator_predecr__PF14titerator_type_R14titerator_type__1)(void *__anonymous_object75), __attribute__ ((unused)) signed int (*___operator_equal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object76, void *__anonymous_object77), __attribute__ ((unused)) signed int (*___operator_notequal__PFi_14titerator_type14titerator_type__1)(void *__anonymous_object78, void *__anonymous_object79), __attribute__ ((unused)) void *(*___operator_deref__PFR9telt_type_14titerator_type__1)(void *__anonymous_object80), void *__begin__14titerator_type_1, void *__end__14titerator_type_1, void (*__func__PF_9telt_type__1)(void *__anonymous_object81));
@@ -1377,10 +1371,4 @@
 }
 static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi___1(); }
-__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned long int __size);
-__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
-__attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern signed int atexit(void (*__func)(void));
-__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(signed int __status);
-extern signed int printf(const char *__restrict __format, ...);
 static inline signed int invoke_main(signed int argc, char **argv, char **envp);
 signed int main(signed int __argc__i_1, char **__argv__PPc_1, char **__envp__PPc_1){
