Index: Jenkinsfile
===================================================================
--- Jenkinsfile	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ Jenkinsfile	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -87,5 +87,13 @@
 		status_prefix = 'Documentation'
 
-		// sh 'make -C src/benchmark csv-data >> /u/cforall/public_html/perf-history/concurrency.csv'
+		// //We can't just write to a file outside our repo
+		// //Copy the file locally using ssh
+		// sh 'scp plg2.cs.uwaterloo.ca:/u/cforall/public_html/perf-history/concurrency.csv bench.csv'
+
+		// //Then append to the local file
+		// sh 'make -C src/benchmark csv-data >> bench.csv'
+
+		// //Then publish the file again
+		// sh 'scp bench.csv plg2.cs.uwaterloo.ca:/u/cforall/public_html/perf-history/concurrency.csv'		
 }
 
@@ -172,4 +180,5 @@
 					]])
 
+				bIsSandbox = env.BRANCH_NAME == "jenkins-sandbox"
 				bIsFullBuild = isFullBuild == 'true'
 				architectureFlag = ''
@@ -224,5 +233,5 @@
 
 		//Send email with final results if this is not a full build
-		if( !bIsFullBuild ) {
+		if( !bIsFullBuild && !bIsSandbox ) {
 			echo 'Notifying users of result'
 			email(currentBuild.result, log_needed)
Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/CodeGen/CodeGenerator.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  9 15:05:18 2017
-// Update Count     : 417
+// Last Modified On : Thu Feb 16 14:56:29 2017
+// Update Count     : 418
 //
 
@@ -141,10 +141,4 @@
 		} // if
 		output << genType( functionDecl->get_functionType(), mangleName( functionDecl ), pretty );
-
-		// how to get this to the Functype?
-		std::list< Declaration * > olds = functionDecl->get_oldDecls();
-		if ( ! olds.empty() ) {
-			output << " /* function has old declaration */";
-		} // if
 
 		asmName( functionDecl );
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/GenPoly/Box.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun 29 21:43:03 2016
-// Update Count     : 296
+// Last Modified On : Thu Feb 16 14:57:16 2017
+// Update Count     : 297
 //
 
@@ -263,5 +263,4 @@
 	DeclarationWithType *LayoutFunctionBuilder::mutate( FunctionDecl *functionDecl ) {
 		functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );
-		mutateAll( functionDecl->get_oldDecls(), *this );
 		++functionNesting;
 		functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/InitTweak/FixInit.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Wed Jan 13 16:29:30 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:41:15 2016
-// Update Count     : 34
+// Last Modified On : Thu Feb 16 14:58:43 2017
+// Update Count     : 35
 //
 
@@ -839,5 +839,4 @@
 		void handleFuncDecl( FunctionDecl * funcDecl, Visitor & visitor ) {
 			maybeAccept( funcDecl->get_functionType(), visitor );
-			acceptAll( funcDecl->get_oldDecls(), visitor );
 			maybeAccept( funcDecl->get_statements(), visitor );
 		}
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/InitTweak/GenInit.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -9,7 +9,7 @@
 // Author           : Rob Schluntz
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Fri May 13 11:37:48 2016
-// Update Count     : 166
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Feb 16 14:57:53 2017
+// Update Count     : 167
 //
 
@@ -320,5 +320,4 @@
 		}
 		// parameters should not be constructed and destructed, so don't mutate FunctionType
-		mutateAll( functionDecl->get_oldDecls(), *this );
 		functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
 
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/Parser/DeclarationNode.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  9 15:54:59 2017
-// Update Count     : 742
+// Last Modified On : Thu Feb 16 13:06:50 2017
+// Update Count     : 753
 //
 
@@ -913,7 +913,6 @@
 	SemanticError errors;
 	std::back_insert_iterator< std::list< Declaration * > > out( outputList );
-	const DeclarationNode * cur = firstNode;
-
-	while ( cur ) {
+
+	for ( const DeclarationNode * cur = firstNode; cur; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) {
 		try {
 			if ( DeclarationNode * extr = cur->extractAggregate() ) {
@@ -936,5 +935,4 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
 	} // while
 
@@ -947,6 +945,6 @@
 	SemanticError errors;
 	std::back_insert_iterator< std::list< DeclarationWithType * > > out( outputList );
-	const DeclarationNode * cur = firstNode;
-	while ( cur ) {
+	
+	for ( const DeclarationNode * cur = firstNode; cur; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) {
 		try {
 			Declaration * decl = cur->build();
@@ -972,6 +970,6 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode * >( cur->get_next() );
-	} // while
+	} // for
+
 	if ( ! errors.isEmpty() ) {
 		throw errors;
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/Parser/ParseNode.h	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  9 14:45:28 2017
-// Update Count     : 658
+// Last Modified On : Thu Feb 16 13:15:55 2017
+// Update Count     : 661
 //
 
@@ -437,5 +437,5 @@
 template< typename SynTreeType, typename NodeType >
 void buildMoveList( const NodeType * firstNode, std::list< SynTreeType * > &outputList ) {
-	buildList(firstNode, outputList);
+	buildList( firstNode, outputList );
 	delete firstNode;
 }
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/Parser/TypeData.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jan 27 15:28:56 2017
-// Update Count     : 428
+// Last Modified On : Thu Feb 16 15:06:59 2017
+// Update Count     : 455
 //
 
@@ -724,4 +724,8 @@
 Declaration * buildDecl( const TypeData * td, const string &name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) {
 	if ( td->kind == TypeData::Function ) {
+		if ( td->function.idList ) {
+			buildKRFunction( td->function );
+		} // if
+
 		FunctionDecl * decl;
 		if ( td->function.hasBody ) {
@@ -738,10 +742,4 @@
 			decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), nullptr, isInline, isNoreturn, attributes );
 		} // if
-		for ( DeclarationNode * cur = td->function.idList; cur != nullptr; cur = dynamic_cast< DeclarationNode* >( cur->get_next() ) ) {
-			if ( cur->name ) {
-				decl->get_oldIdents().insert( decl->get_oldIdents().end(), *cur->name );
-			} // if
-		} // for
-		buildList( td->function.oldDeclList, decl->get_oldDecls() );
 		return decl->set_asmName( asmName );
 	} else if ( td->kind == TypeData::Aggregate ) {
@@ -778,4 +776,31 @@
 } // buildFunction
 
+void buildKRFunction( const TypeData::Function_t & function ) {
+	assert( ! function.params );
+	for ( DeclarationNode * decl = function.oldDeclList; decl != nullptr; decl = dynamic_cast< DeclarationNode* >( decl->get_next() ) ) {
+		for ( DeclarationNode * param = function.idList; param != nullptr; param = dynamic_cast< DeclarationNode* >( param->get_next() ) ) {
+			if ( *decl->name == *param->name ) {
+				if ( param->type ) throw SemanticError( string( "duplicate declaration name " ) + *param->name );
+				if ( ! decl->type ) throw SemanticError( string( "duplicate parameter name " ) + *param->name );
+				param->type = decl->type;
+				decl->type = nullptr;
+				param->attributes.splice( param->attributes.end(), decl->attributes );
+			} // if
+		} // for
+		if ( decl->type ) throw SemanticError( string( "missing name in parameter list " ) + *decl->name );
+	} // for
+	for ( DeclarationNode * param = function.idList; param != nullptr; param = dynamic_cast< DeclarationNode* >( param->get_next() ) ) {
+		if ( ! param->type ) {
+			param->type = new TypeData( TypeData::Basic );
+			param->type->basictype = DeclarationNode::Int;
+		} // if
+	} // for
+
+	function.params = function.idList;
+	function.idList = nullptr;
+	delete function.oldDeclList;
+	function.oldDeclList = nullptr;
+} // buildKRFunction
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/Parser/TypeData.h	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  2 17:02:09 2017
-// Update Count     : 146
+// Last Modified On : Thu Feb 16 14:30:05 2017
+// Update Count     : 153
 //
 
@@ -52,7 +52,7 @@
 
 	struct Function_t {
-		DeclarationNode * params;
-		DeclarationNode * idList;						// old-style
-		DeclarationNode * oldDeclList;
+		mutable DeclarationNode * params;				// mutables modified in buildKRFunction
+		mutable DeclarationNode * idList;				// old-style
+		mutable DeclarationNode * oldDeclList;
 		StatementNode * body;
 		bool hasBody;
@@ -113,4 +113,5 @@
 Declaration * buildDecl( const TypeData *, const std::string &, DeclarationNode::StorageClass, Expression *, bool isInline, bool isNoreturn, LinkageSpec::Spec, ConstantExpr *asmName, Initializer * init = nullptr, std::list< class Attribute * > attributes = std::list< class Attribute * >() );
 FunctionType * buildFunction( const TypeData * );
+void buildKRFunction( const TypeData::Function_t & function );
 
 #endif // TYPEDATA_H
Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/SymTab/Autogen.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Thu Mar 03 15:45:56 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  2 18:04:40 2017
-// Update Count     : 11
+// Last Modified On : Thu Feb 16 15:02:50 2017
+// Update Count     : 13
 //
 
@@ -658,5 +658,4 @@
 
 		maybeAccept( functionDecl->get_functionType(), *this );
-		acceptAll( functionDecl->get_oldDecls(), *this );
 		functionNesting += 1;
 		maybeAccept( functionDecl->get_statements(), *this );
@@ -752,5 +751,4 @@
 	DeclarationWithType * AutogenTupleRoutines::mutate( FunctionDecl *functionDecl ) {
 		functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );
-		mutateAll( functionDecl->get_oldDecls(), *this );
 		functionNesting += 1;
 		functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/SymTab/Indexer.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:37:33 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 12 17:47:47 2016
-// Update Count     : 12
+// Last Modified On : Thu Feb 16 14:59:19 2017
+// Update Count     : 13
 //
 
@@ -236,5 +236,4 @@
 		enterScope();
 		maybeAccept( functionDecl->get_functionType(), *this );
-		acceptAll( functionDecl->get_oldDecls(), *this );
 		maybeAccept( functionDecl->get_statements(), *this );
 		leaveScope();
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/SynTree/Declaration.h	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  9 14:27:08 2017
-// Update Count     : 56
+// Last Modified On : Thu Feb 16 14:53:35 2017
+// Update Count     : 57
 //
 
@@ -140,6 +140,4 @@
 	CompoundStmt *get_statements() const { return statements; }
 	void set_statements( CompoundStmt *newValue ) { statements = newValue; }
-	std::list< std::string >& get_oldIdents() { return oldIdents; }
-	std::list< Declaration* >& get_oldDecls() { return oldDecls; }
 
 	virtual FunctionDecl *clone() const { return new FunctionDecl( *this ); }
@@ -151,6 +149,4 @@
 	FunctionType *type;
 	CompoundStmt *statements;
-	std::list< std::string > oldIdents;
-	std::list< Declaration* > oldDecls;
 };
 
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/SynTree/FunctionDecl.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Oct  1 23:06:32 2016
-// Update Count     : 21
+// Last Modified On : Thu Feb 16 15:01:52 2017
+// Update Count     : 23
 //
 
@@ -44,5 +44,4 @@
 	delete type;
 	delete statements;
-	deleteAll( oldDecls );
 }
 
@@ -84,15 +83,4 @@
 	} // if
 
-	if ( ! oldIdents.empty() ) {
-		os << string( indent + 2, ' ' ) << "with parameter names" << endl;
-		for ( std::list< std::string >::const_iterator i = oldIdents.begin(); i != oldIdents.end(); ++i ) {
-			os << string( indent + 4, ' ' ) << *i << endl;
-		} // for
-	} // if
-
-	if ( ! oldDecls.empty() ) {
-		os << string( indent + 2, ' ' ) << "with parameter declarations" << endl;
-		printAll( oldDecls, os, indent + 4 );
-	} // if
 	if ( statements ) {
 		os << string( indent + 2, ' ' ) << "with body " << endl;
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/SynTree/Mutator.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  9 14:22:56 2017
-// Update Count     : 20
+// Last Modified On : Thu Feb 16 15:02:23 2017
+// Update Count     : 21
 //
 
@@ -38,5 +38,4 @@
 DeclarationWithType *Mutator::mutate( FunctionDecl *functionDecl ) {
 	functionDecl->set_functionType( maybeMutate( functionDecl->get_functionType(), *this ) );
-	mutateAll( functionDecl->get_oldDecls(), *this );
 	functionDecl->set_statements( maybeMutate( functionDecl->get_statements(), *this ) );
 	return functionDecl;
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/SynTree/Visitor.cc	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb  9 14:19:22 2017
-// Update Count     : 22
+// Last Modified On : Thu Feb 16 15:01:25 2017
+// Update Count     : 23
 //
 
@@ -35,5 +35,4 @@
 void Visitor::visit( FunctionDecl *functionDecl ) {
 	maybeAccept( functionDecl->get_functionType(), *this );
-	acceptAll( functionDecl->get_oldDecls(), *this );
 	maybeAccept( functionDecl->get_statements(), *this );
 }
Index: src/tests/.expect/KRfunctions.txt
===================================================================
--- src/tests/.expect/KRfunctions.txt	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
+++ src/tests/.expect/KRfunctions.txt	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -0,0 +1,93 @@
+__attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(long 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 int atexit(void (*__func)(void));
+__attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(int __status);
+extern int printf(const char *__restrict __format, ...);
+int __f0__Fi_iPCii__1(int __a__i_1, const int *__b__PCi_1, int __c__i_1){
+    int ___retval_f0__i_1;
+}
+int __f1__Fi_PiiPi__1(int *__a__Pi_1, __attribute__ ((unused)) int __b__i_1, int *__c__Pi_1){
+    int ___retval_f1__i_1;
+}
+int __f2__Fi_iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1){
+    int ___retval_f2__i_1;
+}
+struct S {
+    int __i__i_1;
+};
+static inline void ___constructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1);
+static inline void ___constructor__F_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1);
+static inline void ___destructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1);
+static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1);
+static inline void ___constructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__i__i_1)))) /* ?{} */);
+}
+static inline void ___constructor__F_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__i__i_1)))=___src__2sS_1.__i__i_1) /* ?{} */);
+}
+static inline void ___destructor__F_P2sS_autogen___1(struct S *___dst__P2sS_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__i__i_1)))) /* ^?{} */);
+}
+static inline struct S ___operator_assign__F2sS_P2sS2sS_autogen___1(struct S *___dst__P2sS_1, struct S ___src__2sS_1){
+    ((void)((*___dst__P2sS_1).__i__i_1=___src__2sS_1.__i__i_1));
+    return ((struct S )___src__2sS_1);
+}
+static inline void ___constructor__F_P2sSi_autogen___1(struct S *___dst__P2sS_1, int __i__i_1){
+    ((void)((*((int *)(&(*___dst__P2sS_1).__i__i_1)))=__i__i_1) /* ?{} */);
+}
+int __f3__Fi_2sS2sSPi__1(struct S __a__2sS_1, struct S __b__2sS_1, int *__c__Pi_1){
+    int ___retval_f3__i_1;
+    struct S __s__2sS_2;
+}
+int __f4__Fi_iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1){
+    int ___retval_f4__i_1;
+}
+int __f5__Fi_iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1){
+    int ___retval_f5__i_1;
+}
+int (*__f6__FPFi_i__iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1))(int ){
+    int (*___retval_f6__PFi_i__1)(int );
+}
+int (*__f7__FPFi_ii__iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1))(int __a__i_1, int __b__i_1){
+    int (*___retval_f7__PFi_ii__1)(int __a__i_1, int __b__i_1);
+}
+int *__f8__FPi_iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1){
+    int *___retval_f8__Pi_1;
+}
+int *const __f9__FCPi_PiiPi__1(int *__a__Pi_1, int __b__i_1, int *__c__Pi_1){
+    int *const ___retval_f9__CPi_1;
+}
+int *(*__f10__FPFPi_ii__iPiPid__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1, double __y__d_1))(int __x__i_1, int __y__i_1){
+    int *(*___retval_f10__PFPi_ii__1)(int __x__i_1, int __y__i_1);
+    int *__x__FPi_ii__2(int , int );
+    ((void)(___retval_f10__PFPi_ii__1=__x__FPi_ii__2) /* ?{} */);
+    return ((int *(*)(int __x__i_1, int __y__i_1))___retval_f10__PFPi_ii__1);
+}
+int (*__f11__FPA0i_iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1))[]{
+    int (*___retval_f11__PA0i_1)[];
+}
+int (*__f12__FPA0A0i_iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1))[][((long unsigned int )10)]{
+    int (*___retval_f12__PA0A0i_1)[][((long unsigned int )10)];
+}
+int (*__f13__FPA0A0i_iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1))[][((long unsigned int )10)]{
+    int (*___retval_f13__PA0A0i_1)[][((long unsigned int )10)];
+}
+int (*__f14__FPA0A0i_iPiPi__1(int __a__i_1, int *__b__Pi_1, int *__c__Pi_1))[][((long unsigned int )10)]{
+    int (*___retval_f14__PA0A0i_1)[][((long unsigned int )10)];
+}
+const int __fred__FCi___1(){
+    const int ___retval_fred__Ci_1;
+    int *(*__x__PFPi_ii__2)(int , int );
+    int __a__i_2;
+    int __b__i_2;
+    int *(*_tmp_cp_ret0)(int __x__i_1, int __y__i_1);
+    ((void)(__x__PFPi_ii__2=((_tmp_cp_ret0=__f10__FPFPi_ii__iPiPid__1(3, (&__a__i_2), (&__b__i_2), 3.5)) , _tmp_cp_ret0)));
+    ((void)((*((int *(**)(int __x__i_1, int __y__i_1))(&_tmp_cp_ret0)))) /* ^?{} */);
+    const int __f1__FCi_iPiPi__2(int __a__i_2, int *__b__Pi_2, int *__c__Pi_2){
+        const int ___retval_f1__Ci_2;
+    }
+    const int __f2__FCi_iii__2(int __a__i_2, int __b__i_2, int __c__i_2){
+        const int ___retval_f2__Ci_2;
+    }
+}
Index: src/tests/KRfunctions.c
===================================================================
--- src/tests/KRfunctions.c	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
+++ src/tests/KRfunctions.c	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -0,0 +1,52 @@
+//                               -*- Mode: C -*- 
+// 
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// KRfunctions.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Thu Feb 16 15:23:17 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Feb 16 15:25:52 2017
+// Update Count     : 2
+// 
+
+f0( a, b, c ) const int * b; {}
+f1( a, b, c ) int b __attribute__ (( unused )), * a, c[]; {}
+(f2)( a, b, c ) int a, * b, c[]; {}
+
+struct S { int i; };
+int f3( a, b, c ) struct S a; struct S b; int c[]; { struct S s;}
+int (f4)( a, b, c ) int a, * b, c[]; {}
+int (f5( a, b, c )) int a, * b, c[]; {}
+
+int (* f6( a, b, c ))(int) int a, * b, c[]; {}
+int (* f7( a, b, c ))(int a, int b) int a, * b, c[]; {}
+int * f8( a, b, c ) int a, * b, c[]; {}
+int * const f9( a, b, c ) int b, * a, c[]; {}
+
+int (* (* f10( a, b, c, y ))( int x, int y ) ) int a, * b, c[]; double y; {
+    int *x( int, int );
+    return x;
+}
+
+int (* f11( a, b, c ))[] int a, * b, c[]; {}
+int (* f12( a, b, c ))[][10] int a, * b, c[]; {}
+int ((* f13( a, b, c ))[])[10] int a, * b, c[]; {}
+int (((* f14( a, b, c ))[])[10]) int a, * b, c[]; {}
+
+const fred() {
+    int *(*x)( int, int );
+    int a, b;
+    x = f10( 3, &a, &b, 3.5 );
+    const f1( a, b, c ) int a, * b, c[]; {}
+    const f2( int a, int b, int c ) {}
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa KRfunctions.c" //
+// End: //
Index: src/tests/Makefile.am
===================================================================
--- src/tests/Makefile.am	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/tests/Makefile.am	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 09:08:15 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Mon Feb  6 16:10:43 2017
-## Update Count     : 40
+## Last Modified On : Thu Feb 16 15:27:50 2017
+## Update Count     : 41
 ###############################################################################
 
@@ -68,4 +68,7 @@
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
+KRfunctions : KRfunctions.c
+	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
+
 memberCtors-ERR1: memberCtors.c
 	${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
Index: src/tests/Makefile.in
===================================================================
--- src/tests/Makefile.in	(revision 32b8144a5e42cc6f2c3a559f216f1cef32992967)
+++ src/tests/Makefile.in	(revision 11f95ee5606eec72d0fcac9490bf3b668c7a28fd)
@@ -689,4 +689,7 @@
 	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
 
+KRfunctions : KRfunctions.c
+	${CC} ${CFLAGS} -CFA -XCFA -p ${<} -o ${@}
+
 memberCtors-ERR1: memberCtors.c
 	${CC} ${CFLAGS} -DERR1 ${<} -o ${@}
