Index: src/Common/PassVisitor.proto.h
===================================================================
--- src/Common/PassVisitor.proto.h	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Common/PassVisitor.proto.h	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -38,5 +38,5 @@
 	};
 
-	std::stack< cleanup_t, std::vector<cleanup_t> > cleanups;
+	std::stack< cleanup_t, std::vector< cleanup_t > > cleanups;
 };
 
Index: src/Common/ScopedMap.h
===================================================================
--- src/Common/ScopedMap.h	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Common/ScopedMap.h	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -93,5 +93,5 @@
 
 		reference operator* () { return *it; }
-		pointer operator-> () { return it.operator->(); }
+		pointer operator-> () const { return it.operator->(); }
 
 		iterator& operator++ () {
Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Concurrency/Keywords.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -510,5 +510,6 @@
 						new CastExpr(
 							new VariableExpr( func->get_functionType()->get_parameters().front() ),
-							func->get_functionType()->get_parameters().front()->get_type()->stripReferences()->clone()
+							func->get_functionType()->get_parameters().front()->get_type()->stripReferences()->clone(),
+							false
 						)
 					)
@@ -888,5 +889,5 @@
 			new SingleInit( new UntypedExpr(
 				new NameExpr( "get_monitor" ),
-				{  new CastExpr( new VariableExpr( args.front() ), arg_type ) }
+				{  new CastExpr( new VariableExpr( args.front() ), arg_type, false ) }
 			))
 		);
@@ -909,5 +910,5 @@
 					{
 						new SingleInit( new AddressExpr( new VariableExpr( monitors ) ) ),
-						new SingleInit( new CastExpr( new VariableExpr( func ), generic_func->clone() ) )
+						new SingleInit( new CastExpr( new VariableExpr( func ), generic_func->clone(), false ) )
 					},
 					noDesignators,
@@ -946,5 +947,5 @@
 					return new SingleInit( new UntypedExpr(
 						new NameExpr( "get_monitor" ),
-						{  new CastExpr( new VariableExpr( var ), type ) }
+						{  new CastExpr( new VariableExpr( var ), type, false ) }
 					) );
 				})
@@ -970,5 +971,5 @@
 						new SingleInit( new VariableExpr( monitors ) ),
 						new SingleInit( new ConstantExpr( Constant::from_ulong( args.size() ) ) ),
-						new SingleInit( new CastExpr( new VariableExpr( func ), generic_func->clone() ) )
+						new SingleInit( new CastExpr( new VariableExpr( func ), generic_func->clone(), false ) )
 					},
 					noDesignators,
Index: src/Concurrency/Waitfor.cc
===================================================================
--- src/Concurrency/Waitfor.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Concurrency/Waitfor.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -384,5 +384,6 @@
 								decl_monitor
 							)
-						)
+						),
+						false
 					);
 
@@ -408,5 +409,5 @@
 			new CompoundStmt({
 				makeAccStatement( acceptables, index, "is_dtor", detectIsDtor( clause.target.function )                                    , indexer ),
-				makeAccStatement( acceptables, index, "func"   , new CastExpr( clause.target.function, fptr_t )                            , indexer ),
+				makeAccStatement( acceptables, index, "func"   , new CastExpr( clause.target.function, fptr_t, false )                     , indexer ),
 				makeAccStatement( acceptables, index, "data"   , new VariableExpr( monitors )                                              , indexer ),
 				makeAccStatement( acceptables, index, "size"   , new ConstantExpr( Constant::from_ulong( clause.target.arguments.size() ) ), indexer ),
@@ -531,5 +532,6 @@
 								decl_mask
 							)
-						)
+						),
+						false
 					),
 					timeout
Index: src/ControlStruct/ExceptTranslate.cc
===================================================================
--- src/ControlStruct/ExceptTranslate.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/ControlStruct/ExceptTranslate.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -10,6 +10,6 @@
 // Created On       : Wed Jun 14 16:49:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Fri Mar 27 11:58:00 2020
-// Update Count     : 13
+// Last Modified On : Wed Jun 24 11:18:00 2020
+// Update Count     : 17
 //
 
@@ -64,16 +64,106 @@
 	}
 
-	class ExceptionMutatorCore : public WithGuards {
-		enum Context { NoHandler, TerHandler, ResHandler };
-
-		// Also need to handle goto, break & continue.
-		// They need to be cut off in a ResHandler, until we enter another
-		// loop, switch or the goto stays within the function.
-
-		Context cur_context;
-
-		// The current (innermost) termination handler exception declaration.
-		ObjectDecl * handler_except_decl;
-
+	class ThrowMutatorCore : public WithGuards {
+		ObjectDecl * terminate_handler_except;
+		enum Context { NoHandler, TerHandler, ResHandler } cur_context;
+
+		// The helper functions for code/syntree generation.
+		Statement * create_either_throw(
+			ThrowStmt * throwStmt, const char * throwFunc );
+		Statement * create_terminate_rethrow( ThrowStmt * throwStmt );
+
+	public:
+		ThrowMutatorCore() :
+			terminate_handler_except( nullptr ),
+			cur_context( NoHandler )
+		{}
+
+		void premutate( CatchStmt *catchStmt );
+		Statement * postmutate( ThrowStmt *throwStmt );
+	};
+
+	// ThrowStmt Mutation Helpers
+
+	Statement * ThrowMutatorCore::create_either_throw(
+			ThrowStmt * throwStmt, const char * throwFunc ) {
+		// `throwFunc`( `throwStmt->get_name()` );
+		UntypedExpr * call = new UntypedExpr( new NameExpr( throwFunc ) );
+		call->get_args().push_back( throwStmt->get_expr() );
+		throwStmt->set_expr( nullptr );
+		delete throwStmt;
+		return new ExprStmt( call );
+	}
+
+	Statement * ThrowMutatorCore::create_terminate_rethrow(
+			ThrowStmt *throwStmt ) {
+		// { `terminate_handler_except` = 0p; __rethrow_terminate(); }
+		assert( nullptr == throwStmt->get_expr() );
+		assert( terminate_handler_except );
+
+		CompoundStmt * result = new CompoundStmt();
+		result->labels =  throwStmt->labels;
+		result->push_back( new ExprStmt( UntypedExpr::createAssign(
+			nameOf( terminate_handler_except ),
+			new ConstantExpr( Constant::null(
+				terminate_handler_except->get_type()->clone()
+				) )
+			) ) );
+		result->push_back( new ExprStmt(
+			new UntypedExpr( new NameExpr( "__cfaehm_rethrow_terminate" ) )
+			) );
+		delete throwStmt;
+		return result;
+	}
+
+	// Visiting/Mutating Functions
+
+	void ThrowMutatorCore::premutate( CatchStmt *catchStmt ) {
+		// Validate the statement's form.
+		ObjectDecl * decl = dynamic_cast<ObjectDecl *>( catchStmt->get_decl() );
+		// Also checking the type would be nice.
+		if ( !decl || !dynamic_cast<PointerType *>( decl->type ) ) {
+			std::string kind = (CatchStmt::Terminate == catchStmt->kind) ? "catch" : "catchResume";
+			SemanticError( catchStmt->location, kind + " must have pointer to an exception type" );
+		}
+
+		// Track the handler context.
+		GuardValue( cur_context );
+		if ( CatchStmt::Terminate == catchStmt->get_kind() ) {
+			cur_context = TerHandler;
+
+			GuardValue( terminate_handler_except );
+			terminate_handler_except = decl;
+		} else {
+			cur_context = ResHandler;
+		}
+	}
+
+	Statement * ThrowMutatorCore::postmutate( ThrowStmt *throwStmt ) {
+		// Ignoring throwStmt->get_target() for now.
+		if ( ThrowStmt::Terminate == throwStmt->get_kind() ) {
+			if ( throwStmt->get_expr() ) {
+				return create_either_throw( throwStmt, "$throw" );
+			} else if ( TerHandler == cur_context ) {
+				return create_terminate_rethrow( throwStmt );
+			} else {
+				abort("Invalid throw in %s at %i\n",
+					throwStmt->location.filename.c_str(),
+					throwStmt->location.first_line);
+			}
+		} else {
+			if ( throwStmt->get_expr() ) {
+				return create_either_throw( throwStmt, "$throwResume" );
+			} else if ( ResHandler == cur_context ) {
+				// This has to be handled later.
+				return throwStmt;
+			} else {
+				abort("Invalid throwResume in %s at %i\n",
+					throwStmt->location.filename.c_str(),
+					throwStmt->location.first_line);
+			}
+		}
+	}
+
+	class TryMutatorCore {
 		// The built in types used in translation.
 		StructDecl * except_decl;
@@ -82,10 +172,4 @@
 
 		// The many helper functions for code/syntree generation.
-		Statement * create_given_throw(
-			const char * throwFunc, ThrowStmt * throwStmt );
-		Statement * create_terminate_throw( ThrowStmt * throwStmt );
-		Statement * create_terminate_rethrow( ThrowStmt * throwStmt );
-		Statement * create_resume_throw( ThrowStmt * throwStmt );
-		Statement * create_resume_rethrow( ThrowStmt * throwStmt );
 		CompoundStmt * take_try_block( TryStmt * tryStmt );
 		FunctionDecl * create_try_wrapper( CompoundStmt * body );
@@ -101,4 +185,5 @@
 		FunctionDecl * create_finally_wrapper( TryStmt * tryStmt );
 		ObjectDecl * create_finally_hook( FunctionDecl * finally_wrapper );
+		Statement * create_resume_rethrow( ThrowStmt * throwStmt );
 
 		// Types used in translation, make sure to use clone.
@@ -121,7 +206,5 @@
 
 	public:
-		ExceptionMutatorCore() :
-			cur_context( NoHandler ),
-			handler_except_decl( nullptr ),
+		TryMutatorCore() :
 			except_decl( nullptr ), node_decl( nullptr ), hook_decl( nullptr ),
 			try_func_t( noQualifiers, false ),
@@ -132,11 +215,10 @@
 		{}
 
-		void premutate( CatchStmt *catchStmt );
 		void premutate( StructDecl *structDecl );
+		Statement * postmutate( TryStmt *tryStmt );
 		Statement * postmutate( ThrowStmt *throwStmt );
-		Statement * postmutate( TryStmt *tryStmt );
 	};
 
-	void ExceptionMutatorCore::init_func_types() {
+	void TryMutatorCore::init_func_types() {
 		assert( except_decl );
 
@@ -196,66 +278,7 @@
 	}
 
-	// ThrowStmt Mutation Helpers
-
-	Statement * ExceptionMutatorCore::create_given_throw(
-			const char * throwFunc, ThrowStmt * throwStmt ) {
-		// `throwFunc`( `throwStmt->get_name` );
-		UntypedExpr * call = new UntypedExpr( new NameExpr( throwFunc ) );
-		call->get_args().push_back( throwStmt->get_expr() );
-		throwStmt->set_expr( nullptr );
-		delete throwStmt;
-		return new ExprStmt( call );
-	}
-
-	Statement * ExceptionMutatorCore::create_terminate_throw(
-			ThrowStmt *throwStmt ) {
-		// __throw_terminate( `throwStmt->get_name()` ); }
-		return create_given_throw( "__cfaehm_throw_terminate", throwStmt );
-	}
-
-	Statement * ExceptionMutatorCore::create_terminate_rethrow(
-			ThrowStmt *throwStmt ) {
-		// { `handler_except_decl` = NULL; __rethrow_terminate(); }
-		assert( nullptr == throwStmt->get_expr() );
-		assert( handler_except_decl );
-
-		CompoundStmt * result = new CompoundStmt();
-		result->labels =  throwStmt->labels;
-		result->push_back( new ExprStmt( UntypedExpr::createAssign(
-			nameOf( handler_except_decl ),
-			new ConstantExpr( Constant::null(
-				new PointerType(
-					noQualifiers,
-					handler_except_decl->get_type()->clone()
-					)
-				) )
-			) ) );
-		result->push_back( new ExprStmt(
-			new UntypedExpr( new NameExpr( "__cfaehm_rethrow_terminate" ) )
-			) );
-		delete throwStmt;
-		return result;
-	}
-
-	Statement * ExceptionMutatorCore::create_resume_throw(
-			ThrowStmt *throwStmt ) {
-		// __throw_resume( `throwStmt->get_name` );
-		return create_given_throw( "__cfaehm_throw_resume", throwStmt );
-	}
-
-	Statement * ExceptionMutatorCore::create_resume_rethrow(
-			ThrowStmt *throwStmt ) {
-		// return false;
-		Statement * result = new ReturnStmt(
-			new ConstantExpr( Constant::from_bool( false ) )
-			);
-		result->labels = throwStmt->labels;
-		delete throwStmt;
-		return result;
-	}
-
 	// TryStmt Mutation Helpers
 
-	CompoundStmt * ExceptionMutatorCore::take_try_block( TryStmt *tryStmt ) {
+	CompoundStmt * TryMutatorCore::take_try_block( TryStmt *tryStmt ) {
 		CompoundStmt * block = tryStmt->get_block();
 		tryStmt->set_block( nullptr );
@@ -263,5 +286,5 @@
 	}
 
-	FunctionDecl * ExceptionMutatorCore::create_try_wrapper(
+	FunctionDecl * TryMutatorCore::create_try_wrapper(
 			CompoundStmt *body ) {
 
@@ -270,5 +293,5 @@
 	}
 
-	FunctionDecl * ExceptionMutatorCore::create_terminate_catch(
+	FunctionDecl * TryMutatorCore::create_terminate_catch(
 			CatchList &handlers ) {
 		std::list<CaseStmt *> handler_wrappers;
@@ -350,5 +373,5 @@
 	// Create a single check from a moddified handler.
 	// except_obj is referenced, modded_handler will be freed.
-	CompoundStmt * ExceptionMutatorCore::create_single_matcher(
+	CompoundStmt * TryMutatorCore::create_single_matcher(
 			DeclarationWithType * except_obj, CatchStmt * modded_handler ) {
 		// {
@@ -388,5 +411,5 @@
 	}
 
-	FunctionDecl * ExceptionMutatorCore::create_terminate_match(
+	FunctionDecl * TryMutatorCore::create_terminate_match(
 			CatchList &handlers ) {
 		// int match(exception * except) {
@@ -425,5 +448,5 @@
 	}
 
-	CompoundStmt * ExceptionMutatorCore::create_terminate_caller(
+	CompoundStmt * TryMutatorCore::create_terminate_caller(
 			FunctionDecl * try_wrapper,
 			FunctionDecl * terminate_catch,
@@ -443,5 +466,5 @@
 	}
 
-	FunctionDecl * ExceptionMutatorCore::create_resume_handler(
+	FunctionDecl * TryMutatorCore::create_resume_handler(
 			CatchList &handlers ) {
 		// bool handle(exception * except) {
@@ -480,5 +503,5 @@
 	}
 
-	CompoundStmt * ExceptionMutatorCore::create_resume_wrapper(
+	CompoundStmt * TryMutatorCore::create_resume_wrapper(
 			Statement * wraps,
 			FunctionDecl * resume_handler ) {
@@ -524,7 +547,7 @@
 	}
 
-	FunctionDecl * ExceptionMutatorCore::create_finally_wrapper(
+	FunctionDecl * TryMutatorCore::create_finally_wrapper(
 			TryStmt * tryStmt ) {
-		// void finally() { <finally code> }
+		// void finally() { `finally->block` }
 		FinallyStmt * finally = tryStmt->get_finally();
 		CompoundStmt * body = finally->get_block();
@@ -537,8 +560,8 @@
 	}
 
-	ObjectDecl * ExceptionMutatorCore::create_finally_hook(
+	ObjectDecl * TryMutatorCore::create_finally_hook(
 			FunctionDecl * finally_wrapper ) {
 		// struct __cfaehm_cleanup_hook __finally_hook
-		//   	__attribute__((cleanup( finally_wrapper )));
+		//   	__attribute__((cleanup( `finally_wrapper` )));
 
 		// Make Cleanup Attribute.
@@ -564,30 +587,16 @@
 	}
 
+	Statement * TryMutatorCore::create_resume_rethrow( ThrowStmt *throwStmt ) {
+		// return false;
+		Statement * result = new ReturnStmt(
+			new ConstantExpr( Constant::from_bool( false ) )
+			);
+		result->labels = throwStmt->labels;
+		delete throwStmt;
+		return result;
+	}
+
 	// Visiting/Mutating Functions
-	void ExceptionMutatorCore::premutate( CatchStmt *catchStmt ) {
-		// Validate the Statement's form.
-		ObjectDecl * decl =
-			dynamic_cast<ObjectDecl *>( catchStmt->get_decl() );
-		if ( decl && true /* check decl->get_type() */ ) {
-			// Pass.
-		} else if ( CatchStmt::Terminate == catchStmt->get_kind() ) {
-			SemanticError(catchStmt->location, "catch must have exception type");
-		} else {
-			SemanticError(catchStmt->location, "catchResume must have exception type");
-		}
-
-		// Track the handler context.
-		GuardValue( cur_context );
-		if ( CatchStmt::Terminate == catchStmt->get_kind() ) {
-			cur_context = TerHandler;
-
-			GuardValue( handler_except_decl );
-			handler_except_decl = decl;
-		} else {
-			cur_context = ResHandler;
-		}
-	}
-
-	void ExceptionMutatorCore::premutate( StructDecl *structDecl ) {
+	void TryMutatorCore::premutate( StructDecl *structDecl ) {
 		if ( !structDecl->has_body() ) {
 			// Skip children?
@@ -604,35 +613,7 @@
 			hook_decl = structDecl;
 		}
-		// Later we might get the exception type as well.
-	}
-
-	Statement * ExceptionMutatorCore::postmutate( ThrowStmt *throwStmt ) {
-		assert( except_decl );
-
-		// Ignoring throwStmt->get_target() for now.
-		if ( ThrowStmt::Terminate == throwStmt->get_kind() ) {
-			if ( throwStmt->get_expr() ) {
-				return create_terminate_throw( throwStmt );
-			} else if ( TerHandler == cur_context ) {
-				return create_terminate_rethrow( throwStmt );
-			} else {
-				abort("Invalid throw in %s at %i\n",
-					throwStmt->location.filename.c_str(),
-					throwStmt->location.first_line);
-			}
-		} else {
-			if ( throwStmt->get_expr() ) {
-				return create_resume_throw( throwStmt );
-			} else if ( ResHandler == cur_context ) {
-				return create_resume_rethrow( throwStmt );
-			} else {
-				abort("Invalid throwResume in %s at %i\n",
-					throwStmt->location.filename.c_str(),
-					throwStmt->location.first_line);
-			}
-		}
-	}
-
-	Statement * ExceptionMutatorCore::postmutate( TryStmt *tryStmt ) {
+	}
+
+	Statement * TryMutatorCore::postmutate( TryStmt *tryStmt ) {
 		assert( except_decl );
 		assert( node_decl );
@@ -688,7 +669,18 @@
 	}
 
-	void translateEHM( std::list< Declaration *> & translationUnit ) {
-		PassVisitor<ExceptionMutatorCore> translator;
+	Statement * TryMutatorCore::postmutate( ThrowStmt *throwStmt ) {
+		// Only valid `throwResume;` statements should remain. (2/3 checks)
+		assert( ThrowStmt::Resume == throwStmt->kind && ! throwStmt->expr );
+		return create_resume_rethrow( throwStmt );
+	}
+
+	void translateThrows( std::list< Declaration *> & translationUnit ) {
+		PassVisitor<ThrowMutatorCore> translator;
 		mutateAll( translationUnit, translator );
 	}
+
+	void translateTries( std::list< Declaration *> & translationUnit ) {
+		PassVisitor<TryMutatorCore> translator;
+		mutateAll( translationUnit, translator );
+	}
 }
Index: src/ControlStruct/ExceptTranslate.h
===================================================================
--- src/ControlStruct/ExceptTranslate.h	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/ControlStruct/ExceptTranslate.h	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -9,7 +9,7 @@
 // Author           : Andrew Beach
 // Created On       : Tus Jun 06 10:13:00 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 09:19:23 2017
-// Update Count     : 4
+// Last Modified By : Andrew Beach
+// Last Modified On : Tus May 19 11:47:00 2020
+// Update Count     : 5
 //
 
@@ -21,7 +21,14 @@
 
 namespace ControlStruct {
-	void translateEHM( std::list< Declaration *> & translationUnit );
-	// Converts exception handling structures into their underlying C code.  Translation does use the exception
-	// handling header, make sure it is visible wherever translation occurs.
+	void translateThrows( std::list< Declaration *> & translationUnit );
+	/* Replaces all throw & throwResume statements with function calls.
+	 * These still need to be resolved, so call this before the reslover.
+	 */
+
+	void translateTries( std::list< Declaration *> & translationUnit );
+	/* Replaces all try blocks (and their many clauses) with function definitions and calls.
+	 * This uses the exception built-ins to produce typed output and should take place after
+	 * the resolver. It also produces virtual casts and should happen before they are expanded.
+	 */
 }
 
Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/GenPoly/InstantiateGeneric.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -9,7 +9,7 @@
 // Author           : Aaron B. Moss
 // Created On       : Thu Aug 04 18:33:00 2016
-// Last Modified By : Aaron B. Moss
-// Last Modified On : Thu Aug 04 18:33:00 2016
-// Update Count     : 1
+// Last Modified By : Andrew Beach
+// Last Modified On : Wed Jul 16 10:17:00 2020
+// Update Count     : 2
 //
 #include "InstantiateGeneric.h"
@@ -297,4 +297,16 @@
 	}
 
+	template< typename AggrInst >
+	static AggrInst * asForward( AggrInst * decl ) {
+		if ( !decl->body ) {
+			return nullptr;
+		}
+		decl = decl->clone();
+		decl->body = false;
+		deleteAll( decl->members );
+		decl->members.clear();
+		return decl;
+	}
+
 	void GenericInstantiator::stripDtypeParams( AggregateDecl *base, std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs ) {
 		substituteMembers( base->get_members(), baseParams, typeSubs );
@@ -373,5 +385,9 @@
 				concDecl->set_body( inst->get_baseStruct()->has_body() );
 				substituteMembers( inst->get_baseStruct()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
-				insert( inst, typeSubs, concDecl ); // must insert before recursion
+				// Forward declare before recursion. (TODO: Only when needed, #199.)
+				insert( inst, typeSubs, concDecl );
+				if ( StructDecl *forwardDecl = asForward( concDecl ) ) {
+					declsToAddBefore.push_back( forwardDecl );
+				}
 				concDecl->acceptMutator( *visitor ); // recursively instantiate members
 				declsToAddBefore.push_back( concDecl ); // must occur before declaration is added so that member instantiations appear first
@@ -423,5 +439,9 @@
 				concDecl->set_body( inst->get_baseUnion()->has_body() );
 				substituteMembers( inst->get_baseUnion()->get_members(), *inst->get_baseParameters(), typeSubs, concDecl->get_members() );
-				insert( inst, typeSubs, concDecl ); // must insert before recursion
+				// Forward declare before recursion. (TODO: Only when needed, #199.)
+				insert( inst, typeSubs, concDecl );
+				if ( UnionDecl *forwardDecl = asForward( concDecl ) ) {
+					declsToAddBefore.push_back( forwardDecl );
+				}
 				concDecl->acceptMutator( *visitor ); // recursively instantiate members
 				declsToAddBefore.push_back( concDecl ); // must occur before declaration is added so that member instantiations appear first
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/GenPoly/Specialize.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Dec 13 23:40:49 2019
-// Update Count     : 32
+// Last Modified By : Andrew Beach
+// Last Modified On : Thr Jul  2 17:42:00 2020
+// Update Count     : 33
 //
 
@@ -42,5 +42,6 @@
 
 namespace GenPoly {
-	struct Specialize final : public WithConstTypeSubstitution, public WithStmtsToAdd, public WithVisitorRef<Specialize> {
+	struct Specialize final : public WithConstTypeSubstitution,
+			public WithDeclsToAdd, public WithVisitorRef<Specialize> {
 		Expression * postmutate( ApplicationExpr *applicationExpr );
 		Expression * postmutate( CastExpr *castExpr );
@@ -248,16 +249,20 @@
 		} // if
 
-		// handle any specializations that may still be present
-		std::string oldParamPrefix = paramPrefix;
-		paramPrefix += "p";
-		// save stmtsToAddBefore in oldStmts
-		std::list< Statement* > oldStmts;
-		oldStmts.splice( oldStmts.end(), stmtsToAddBefore );
-		appExpr->acceptMutator( *visitor );
-		paramPrefix = oldParamPrefix;
-		// write any statements added for recursive specializations into the thunk body
-		thunkFunc->statements->kids.splice( thunkFunc->statements->kids.end(), stmtsToAddBefore );
-		// restore oldStmts into stmtsToAddBefore
-		stmtsToAddBefore.splice( stmtsToAddBefore.end(), oldStmts );
+		// Handle any specializations that may still be present.
+		{
+			std::string oldParamPrefix = paramPrefix;
+			paramPrefix += "p";
+			std::list< Declaration * > oldDecls;
+			oldDecls.splice( oldDecls.end(), declsToAddBefore );
+
+			appExpr->acceptMutator( *visitor );
+			// Write recursive specializations into the thunk body.
+			for ( Declaration * decl : declsToAddBefore ) {
+				thunkFunc->statements->kids.push_back( new DeclStmt( decl ) );
+			}
+
+			declsToAddBefore = std::move( oldDecls );
+			paramPrefix = oldParamPrefix;
+		}
 
 		// add return (or valueless expression) to the thunk
@@ -270,6 +275,6 @@
 		thunkFunc->statements->kids.push_back( appStmt );
 
-		// add thunk definition to queue of statements to add
-		stmtsToAddBefore.push_back( new DeclStmt( thunkFunc ) );
+		// Add the thunk definition (converted to DeclStmt if appproprate).
+		declsToAddBefore.push_back( thunkFunc );
 		// return address of thunk function as replacement expression
 		return new AddressExpr( new VariableExpr( thunkFunc ) );
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ 	(revision )
@@ -1,1682 +1,0 @@
-# Makefile.in generated by automake 1.15 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-######################## -*- Mode: Makefile-Automake -*- ######################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-#SRC +=  ArgTweak/Rewriter.cc \
-#	ArgTweak/Mutate.cc
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-######################### -*- Mode: Makefile-Gmake -*- ########################
-###############################################################################
-
-
-VPATH = @srcdir@
-am__is_gnu_make = { \
-  if test -z '$(MAKELEVEL)'; then \
-    false; \
-  elif test -n '$(MAKE_HOST)'; then \
-    true; \
-  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
-    true; \
-  else \
-    false; \
-  fi; \
-}
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \	]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-cfa_cpplib_PROGRAMS = ../driver/cfa-cpp$(EXEEXT) $(DEMANGLER)
-EXTRA_PROGRAMS = demangler$(EXEEXT)
-subdir = src
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/automake/libtool.m4 \
-	$(top_srcdir)/automake/ltoptions.m4 \
-	$(top_srcdir)/automake/ltsugar.m4 \
-	$(top_srcdir)/automake/ltversion.m4 \
-	$(top_srcdir)/automake/lt~obsolete.m4 \
-	$(top_srcdir)/automake/cfa.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AM_V_AR = $(am__v_AR_@AM_V@)
-am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
-am__v_AR_0 = @echo "  AR      " $@;
-am__v_AR_1 = 
-libdemangle_a_AR = $(AR) $(ARFLAGS)
-libdemangle_a_LIBADD =
-am__dirstamp = $(am__leading_dot)dirstamp
-am__objects_1 = AST/AssertAcyclic.$(OBJEXT) AST/Attribute.$(OBJEXT) \
-	AST/Convert.$(OBJEXT) AST/Decl.$(OBJEXT) \
-	AST/DeclReplacer.$(OBJEXT) AST/Expr.$(OBJEXT) \
-	AST/ForallSubstitutionTable.$(OBJEXT) \
-	AST/GenericSubstitution.$(OBJEXT) AST/Init.$(OBJEXT) \
-	AST/LinkageSpec.$(OBJEXT) AST/Node.$(OBJEXT) \
-	AST/Pass.$(OBJEXT) AST/Print.$(OBJEXT) AST/Stmt.$(OBJEXT) \
-	AST/SymbolTable.$(OBJEXT) AST/Type.$(OBJEXT) \
-	AST/TypeEnvironment.$(OBJEXT) AST/TypeSubstitution.$(OBJEXT)
-am__objects_2 = CodeGen/CodeGenerator.$(OBJEXT) \
-	CodeGen/FixMain.$(OBJEXT) CodeGen/GenType.$(OBJEXT) \
-	CodeGen/OperatorTable.$(OBJEXT)
-am__objects_3 = Common/Assert.$(OBJEXT) Common/Eval.$(OBJEXT) \
-	Common/PassVisitor.$(OBJEXT) Common/SemanticError.$(OBJEXT) \
-	Common/Stats/Counter.$(OBJEXT) Common/Stats/Heap.$(OBJEXT) \
-	Common/Stats/Stats.$(OBJEXT) Common/Stats/Time.$(OBJEXT) \
-	Common/UniqueName.$(OBJEXT)
-am__objects_4 = ControlStruct/ForExprMutator.$(OBJEXT) \
-	ControlStruct/LabelFixer.$(OBJEXT) \
-	ControlStruct/LabelGenerator.$(OBJEXT) \
-	ControlStruct/MLEMutator.$(OBJEXT) \
-	ControlStruct/Mutate.$(OBJEXT)
-am__objects_5 = ResolvExpr/AdjustExprType.$(OBJEXT) \
-	ResolvExpr/Alternative.$(OBJEXT) \
-	ResolvExpr/AlternativeFinder.$(OBJEXT) \
-	ResolvExpr/Candidate.$(OBJEXT) \
-	ResolvExpr/CandidateFinder.$(OBJEXT) \
-	ResolvExpr/CastCost.$(OBJEXT) ResolvExpr/CommonType.$(OBJEXT) \
-	ResolvExpr/ConversionCost.$(OBJEXT) \
-	ResolvExpr/CurrentObject.$(OBJEXT) \
-	ResolvExpr/ExplodedActual.$(OBJEXT) \
-	ResolvExpr/ExplodedArg.$(OBJEXT) \
-	ResolvExpr/FindOpenVars.$(OBJEXT) ResolvExpr/Occurs.$(OBJEXT) \
-	ResolvExpr/PolyCost.$(OBJEXT) \
-	ResolvExpr/PtrsAssignable.$(OBJEXT) \
-	ResolvExpr/PtrsCastable.$(OBJEXT) \
-	ResolvExpr/RenameVars.$(OBJEXT) \
-	ResolvExpr/ResolveAssertions.$(OBJEXT) \
-	ResolvExpr/Resolver.$(OBJEXT) \
-	ResolvExpr/ResolveTypeof.$(OBJEXT) \
-	ResolvExpr/SatisfyAssertions.$(OBJEXT) \
-	ResolvExpr/SpecCost.$(OBJEXT) \
-	ResolvExpr/TypeEnvironment.$(OBJEXT) \
-	ResolvExpr/Unify.$(OBJEXT)
-am__objects_6 = SymTab/Autogen.$(OBJEXT) SymTab/FixFunction.$(OBJEXT) \
-	SymTab/Indexer.$(OBJEXT) SymTab/Mangler.$(OBJEXT) \
-	SymTab/ManglerCommon.$(OBJEXT) SymTab/Validate.$(OBJEXT)
-am__objects_7 = SynTree/AddressExpr.$(OBJEXT) \
-	SynTree/AggregateDecl.$(OBJEXT) \
-	SynTree/ApplicationExpr.$(OBJEXT) SynTree/ArrayType.$(OBJEXT) \
-	SynTree/AttrType.$(OBJEXT) SynTree/Attribute.$(OBJEXT) \
-	SynTree/BasicType.$(OBJEXT) SynTree/CommaExpr.$(OBJEXT) \
-	SynTree/CompoundStmt.$(OBJEXT) SynTree/Constant.$(OBJEXT) \
-	SynTree/DeclReplacer.$(OBJEXT) SynTree/DeclStmt.$(OBJEXT) \
-	SynTree/Declaration.$(OBJEXT) \
-	SynTree/DeclarationWithType.$(OBJEXT) \
-	SynTree/Expression.$(OBJEXT) SynTree/FunctionDecl.$(OBJEXT) \
-	SynTree/FunctionType.$(OBJEXT) SynTree/Initializer.$(OBJEXT) \
-	SynTree/LinkageSpec.$(OBJEXT) SynTree/NamedTypeDecl.$(OBJEXT) \
-	SynTree/ObjectDecl.$(OBJEXT) SynTree/PointerType.$(OBJEXT) \
-	SynTree/ReferenceToType.$(OBJEXT) \
-	SynTree/ReferenceType.$(OBJEXT) SynTree/Statement.$(OBJEXT) \
-	SynTree/TupleExpr.$(OBJEXT) SynTree/TupleType.$(OBJEXT) \
-	SynTree/Type.$(OBJEXT) SynTree/TypeDecl.$(OBJEXT) \
-	SynTree/TypeExpr.$(OBJEXT) SynTree/TypeSubstitution.$(OBJEXT) \
-	SynTree/TypeofType.$(OBJEXT) SynTree/VarArgsType.$(OBJEXT) \
-	SynTree/VoidType.$(OBJEXT) SynTree/ZeroOneType.$(OBJEXT)
-am__objects_8 = CompilationState.$(OBJEXT) $(am__objects_1) \
-	$(am__objects_2) Concurrency/Keywords.$(OBJEXT) \
-	$(am__objects_3) $(am__objects_4) GenPoly/GenPoly.$(OBJEXT) \
-	GenPoly/Lvalue.$(OBJEXT) InitTweak/GenInit.$(OBJEXT) \
-	InitTweak/InitTweak.$(OBJEXT) $(am__objects_5) \
-	$(am__objects_6) SymTab/Demangle.$(OBJEXT) $(am__objects_7) \
-	Tuples/TupleAssignment.$(OBJEXT) \
-	Tuples/TupleExpansion.$(OBJEXT) Tuples/Explode.$(OBJEXT) \
-	Tuples/Tuples.$(OBJEXT) Validate/HandleAttributes.$(OBJEXT) \
-	Validate/FindSpecialDecls.$(OBJEXT)
-am_libdemangle_a_OBJECTS = $(am__objects_8)
-libdemangle_a_OBJECTS = $(am_libdemangle_a_OBJECTS)
-am__installdirs = "$(DESTDIR)$(cfa_cpplibdir)"
-PROGRAMS = $(cfa_cpplib_PROGRAMS)
-am__objects_9 = main.$(OBJEXT) MakeLibCfa.$(OBJEXT) \
-	CompilationState.$(OBJEXT) $(am__objects_1) $(am__objects_2) \
-	CodeGen/Generate.$(OBJEXT) CodeGen/FixNames.$(OBJEXT) \
-	CodeTools/DeclStats.$(OBJEXT) \
-	CodeTools/ResolvProtoDump.$(OBJEXT) \
-	CodeTools/TrackLoc.$(OBJEXT) Concurrency/Keywords.$(OBJEXT) \
-	Concurrency/Waitfor.$(OBJEXT) $(am__objects_3) \
-	Common/DebugMalloc.$(OBJEXT) $(am__objects_4) \
-	ControlStruct/ExceptTranslate.$(OBJEXT) GenPoly/Box.$(OBJEXT) \
-	GenPoly/GenPoly.$(OBJEXT) GenPoly/ScrubTyVars.$(OBJEXT) \
-	GenPoly/Lvalue.$(OBJEXT) GenPoly/Specialize.$(OBJEXT) \
-	GenPoly/FindFunction.$(OBJEXT) \
-	GenPoly/InstantiateGeneric.$(OBJEXT) \
-	InitTweak/GenInit.$(OBJEXT) InitTweak/FixInit.$(OBJEXT) \
-	InitTweak/FixGlobalInit.$(OBJEXT) \
-	InitTweak/InitTweak.$(OBJEXT) Parser/DeclarationNode.$(OBJEXT) \
-	Parser/ExpressionNode.$(OBJEXT) \
-	Parser/InitializerNode.$(OBJEXT) Parser/ParseNode.$(OBJEXT) \
-	Parser/StatementNode.$(OBJEXT) Parser/TypeData.$(OBJEXT) \
-	Parser/TypedefTable.$(OBJEXT) Parser/lex.$(OBJEXT) \
-	Parser/parser.$(OBJEXT) Parser/parserutility.$(OBJEXT) \
-	$(am__objects_5) ResolvExpr/AlternativePrinter.$(OBJEXT) \
-	$(am__objects_6) $(am__objects_7) \
-	Tuples/TupleAssignment.$(OBJEXT) \
-	Tuples/TupleExpansion.$(OBJEXT) Tuples/Explode.$(OBJEXT) \
-	Tuples/Tuples.$(OBJEXT) Validate/HandleAttributes.$(OBJEXT) \
-	Validate/FindSpecialDecls.$(OBJEXT) \
-	Virtual/ExpandCasts.$(OBJEXT)
-am____driver_cfa_cpp_OBJECTS = $(am__objects_9)
-___driver_cfa_cpp_OBJECTS = $(am____driver_cfa_cpp_OBJECTS)
-am__DEPENDENCIES_1 =
-___driver_cfa_cpp_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-	$(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 = 
-am_demangler_OBJECTS = SymTab/demangler.$(OBJEXT)
-demangler_OBJECTS = $(am_demangler_OBJECTS)
-demangler_DEPENDENCIES = libdemangle.a
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/automake/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-	$(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_@AM_V@)
-am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo "  CXX     " $@;
-am__v_CXX_1 = 
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
-am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo "  CXXLD   " $@;
-am__v_CXXLD_1 = 
-LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
-LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS)
-AM_V_LEX = $(am__v_LEX_@AM_V@)
-am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@)
-am__v_LEX_0 = @echo "  LEX     " $@;
-am__v_LEX_1 = 
-YLWRAP = $(top_srcdir)/automake/ylwrap
-am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
-		   -e s/c++$$/h++/ -e s/c$$/h/
-YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
-LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS)
-AM_V_YACC = $(am__v_YACC_@AM_V@)
-am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
-am__v_YACC_0 = @echo "  YACC    " $@;
-am__v_YACC_1 = 
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-	$(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-	$(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
-SOURCES = $(libdemangle_a_SOURCES) $(___driver_cfa_cpp_SOURCES) \
-	$(demangler_SOURCES)
-DIST_SOURCES = $(libdemangle_a_SOURCES) $(___driver_cfa_cpp_SOURCES) \
-	$(demangler_SOURCES)
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
-	$(LISP)config.h.in
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-am__DIST_COMMON = $(srcdir)/AST/module.mk $(srcdir)/CodeGen/module.mk \
-	$(srcdir)/CodeTools/module.mk $(srcdir)/Common/module.mk \
-	$(srcdir)/Concurrency/module.mk \
-	$(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk \
-	$(srcdir)/InitTweak/module.mk $(srcdir)/Makefile.in \
-	$(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk \
-	$(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk \
-	$(srcdir)/Tuples/module.mk $(srcdir)/Validate/module.mk \
-	$(srcdir)/Virtual/module.mk $(top_srcdir)/automake/depcomp \
-	$(top_srcdir)/automake/ylwrap Parser/lex.cc Parser/parser.cc \
-	Parser/parser.hh
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BUILD_IN_TREE_FLAGS = @BUILD_IN_TREE_FLAGS@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFACC = @CFACC@
-CFACC_INSTALL = @CFACC_INSTALL@
-CFACPP = @CFACPP@
-CFA_BACKEND_CC = @CFA_BACKEND_CC@
-CFA_BINDIR = @CFA_BINDIR@
-CFA_FLAGS = @CFA_FLAGS@
-CFA_INCDIR = @CFA_INCDIR@
-CFA_LIBDIR = @CFA_LIBDIR@
-CFA_NAME = @CFA_NAME@
-CFA_PREFIX = @CFA_PREFIX@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEMANGLER = @DEMANGLER@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DRIVER_DIR = @DRIVER_DIR@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-GREP = @GREP@
-HAS_DISTCC = @HAS_DISTCC@
-HOST_FLAGS = @HOST_FLAGS@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBCFA_TARGET_DIRS = @LIBCFA_TARGET_DIRS@
-LIBCFA_TARGET_MAKEFILES = @LIBCFA_TARGET_MAKEFILES@
-LIBDEMANGLE = @LIBDEMANGLE@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TARGET_HOSTS = @TARGET_HOSTS@
-VERSION = @VERSION@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-runstatedir = @runstatedir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-
-# create object files in directory with source files
-AUTOMAKE_OPTIONS = foreign subdir-objects
-ACLOCAL_AMFLAGS = -I automake
-SRC = main.cc MakeLibCfa.cc CompilationState.cc $(SRC_AST) \
-	$(SRC_CODEGEN) CodeGen/Generate.cc CodeGen/FixNames.cc \
-	CodeTools/DeclStats.cc CodeTools/ResolvProtoDump.cc \
-	CodeTools/TrackLoc.cc Concurrency/Keywords.cc \
-	Concurrency/Waitfor.cc $(SRC_COMMON) Common/DebugMalloc.cc \
-	$(SRC_CONTROLSTRUCT) ControlStruct/ExceptTranslate.cc \
-	GenPoly/Box.cc GenPoly/GenPoly.cc GenPoly/ScrubTyVars.cc \
-	GenPoly/Lvalue.cc GenPoly/Specialize.cc \
-	GenPoly/FindFunction.cc GenPoly/InstantiateGeneric.cc \
-	InitTweak/GenInit.cc InitTweak/FixInit.cc \
-	InitTweak/FixGlobalInit.cc InitTweak/InitTweak.cc \
-	Parser/DeclarationNode.cc Parser/ExpressionNode.cc \
-	Parser/InitializerNode.cc Parser/ParseNode.cc \
-	Parser/StatementNode.cc Parser/TypeData.cc \
-	Parser/TypedefTable.cc Parser/lex.ll Parser/parser.yy \
-	Parser/parserutility.cc $(SRC_RESOLVEXPR) \
-	ResolvExpr/AlternativePrinter.cc $(SRC_SYMTAB) $(SRC_SYNTREE) \
-	Tuples/TupleAssignment.cc Tuples/TupleExpansion.cc \
-	Tuples/Explode.cc Tuples/Tuples.cc \
-	Validate/HandleAttributes.cc Validate/FindSpecialDecls.cc \
-	Virtual/ExpandCasts.cc
-SRCDEMANGLE = CompilationState.cc $(SRC_AST) $(SRC_CODEGEN) \
-	Concurrency/Keywords.cc $(SRC_COMMON) $(SRC_CONTROLSTRUCT) \
-	GenPoly/GenPoly.cc GenPoly/Lvalue.cc InitTweak/GenInit.cc \
-	InitTweak/InitTweak.cc $(SRC_RESOLVEXPR) $(SRC_SYMTAB) \
-	SymTab/Demangle.cc $(SRC_SYNTREE) Tuples/TupleAssignment.cc \
-	Tuples/TupleExpansion.cc Tuples/Explode.cc Tuples/Tuples.cc \
-	Validate/HandleAttributes.cc Validate/FindSpecialDecls.cc
-MAINTAINERCLEANFILES = ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
-MOSTLYCLEANFILES = Parser/lex.cc Parser/parser.cc Parser/parser.hh \
-	Parser/parser.output
-@WITH_LIBPROFILER_TRUE@LIBPROFILER = -lprofiler
-@WITH_LIBTCMALLOC_TRUE@LIBTCMALLOC = -ltcmalloc
-@WITH_LIBTCMALLOC_TRUE@TCMALLOCFLAG = -DTCMALLOC
-SRC_AST = \
-	AST/AssertAcyclic.cpp \
-	AST/Attribute.cpp \
-	AST/Convert.cpp \
-	AST/Decl.cpp \
-	AST/DeclReplacer.cpp \
-	AST/Expr.cpp \
-	AST/ForallSubstitutionTable.cpp \
-	AST/GenericSubstitution.cpp \
-	AST/Init.cpp \
-	AST/LinkageSpec.cpp \
-	AST/Node.cpp \
-	AST/Pass.cpp \
-	AST/Print.cpp \
-	AST/Stmt.cpp \
-	AST/SymbolTable.cpp \
-	AST/Type.cpp \
-	AST/TypeEnvironment.cpp \
-	AST/TypeSubstitution.cpp
-
-SRC_CODEGEN = \
-	CodeGen/CodeGenerator.cc \
-	CodeGen/FixMain.cc \
-	CodeGen/GenType.cc \
-	CodeGen/OperatorTable.cc
-
-SRC_COMMON = \
-      Common/Assert.cc \
-      Common/Eval.cc \
-      Common/PassVisitor.cc \
-      Common/SemanticError.cc \
-      Common/Stats/Counter.cc \
-      Common/Stats/Heap.cc \
-      Common/Stats/Stats.cc \
-      Common/Stats/Time.cc \
-      Common/UniqueName.cc
-
-SRC_CONTROLSTRUCT = \
-	ControlStruct/ForExprMutator.cc \
-	ControlStruct/LabelFixer.cc \
-	ControlStruct/LabelGenerator.cc \
-	ControlStruct/MLEMutator.cc \
-	ControlStruct/Mutate.cc
-
-BUILT_SOURCES = Parser/parser.hh
-AM_YFLAGS = -d -t -v
-SRC_RESOLVEXPR = \
-      ResolvExpr/AdjustExprType.cc \
-      ResolvExpr/Alternative.cc \
-      ResolvExpr/AlternativeFinder.cc \
-      ResolvExpr/Candidate.cpp \
-      ResolvExpr/CandidateFinder.cpp \
-      ResolvExpr/CastCost.cc \
-      ResolvExpr/CommonType.cc \
-      ResolvExpr/ConversionCost.cc \
-      ResolvExpr/CurrentObject.cc \
-      ResolvExpr/ExplodedActual.cc \
-      ResolvExpr/ExplodedArg.cpp \
-      ResolvExpr/FindOpenVars.cc \
-      ResolvExpr/Occurs.cc \
-      ResolvExpr/PolyCost.cc \
-      ResolvExpr/PtrsAssignable.cc \
-      ResolvExpr/PtrsCastable.cc \
-      ResolvExpr/RenameVars.cc \
-      ResolvExpr/ResolveAssertions.cc \
-      ResolvExpr/Resolver.cc \
-      ResolvExpr/ResolveTypeof.cc \
-      ResolvExpr/SatisfyAssertions.cpp \
-      ResolvExpr/SpecCost.cc \
-      ResolvExpr/TypeEnvironment.cc \
-      ResolvExpr/Unify.cc
-
-SRC_SYMTAB = \
-      SymTab/Autogen.cc \
-      SymTab/FixFunction.cc \
-      SymTab/Indexer.cc \
-      SymTab/Mangler.cc \
-      SymTab/ManglerCommon.cc \
-      SymTab/Validate.cc
-
-SRC_SYNTREE = \
-      SynTree/AddressExpr.cc \
-      SynTree/AggregateDecl.cc \
-      SynTree/ApplicationExpr.cc \
-      SynTree/ArrayType.cc \
-      SynTree/AttrType.cc \
-      SynTree/Attribute.cc \
-      SynTree/BasicType.cc \
-      SynTree/CommaExpr.cc \
-      SynTree/CompoundStmt.cc \
-      SynTree/Constant.cc \
-      SynTree/DeclReplacer.cc \
-      SynTree/DeclStmt.cc \
-      SynTree/Declaration.cc \
-      SynTree/DeclarationWithType.cc \
-      SynTree/Expression.cc \
-      SynTree/FunctionDecl.cc \
-      SynTree/FunctionType.cc \
-      SynTree/Initializer.cc \
-      SynTree/LinkageSpec.cc \
-      SynTree/NamedTypeDecl.cc \
-      SynTree/ObjectDecl.cc \
-      SynTree/PointerType.cc \
-      SynTree/ReferenceToType.cc \
-      SynTree/ReferenceType.cc \
-      SynTree/Statement.cc \
-      SynTree/TupleExpr.cc \
-      SynTree/TupleType.cc \
-      SynTree/Type.cc \
-      SynTree/TypeDecl.cc \
-      SynTree/TypeExpr.cc \
-      SynTree/TypeSubstitution.cc \
-      SynTree/TypeofType.cc \
-      SynTree/VarArgsType.cc \
-      SynTree/VoidType.cc \
-      SynTree/ZeroOneType.cc
-
-
-# put into lib for now
-cfa_cpplibdir = $(CFA_LIBDIR)
-___driver_cfa_cpp_SOURCES = $(SRC)
-___driver_cfa_cpp_LDADD = -ldl $(LIBPROFILER) $(LIBTCMALLOC)
-AM_CXXFLAGS = @HOST_FLAGS@ -Wno-deprecated -Wall -Wextra -DDEBUG_ALL -I./Parser -I$(srcdir)/Parser -I$(srcdir)/include -DYY_NO_INPUT -O3 -g -std=c++14 $(TCMALLOCFLAG)
-AM_LDFLAGS = @HOST_FLAGS@ -Xlinker -export-dynamic
-ARFLAGS = cr
-demangler_SOURCES = SymTab/demangler.cc # test driver for the demangler, also useful as a sanity check that libdemangle.a is complete
-demangler_LDADD = libdemangle.a -ldl			# yywrap
-noinst_LIBRARIES = $(LIBDEMANGLE)
-EXTRA_LIBRARIES = libdemangle.a
-libdemangle_a_SOURCES = $(SRCDEMANGLE)
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .cc .cpp .ll .lo .o .obj .yy
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/AST/module.mk $(srcdir)/CodeGen/module.mk $(srcdir)/CodeTools/module.mk $(srcdir)/Concurrency/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk $(srcdir)/Validate/module.mk $(srcdir)/Virtual/module.mk $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-	        && { if test -f $@; then exit 0; else break; fi; }; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
-	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign src/Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-$(srcdir)/AST/module.mk $(srcdir)/CodeGen/module.mk $(srcdir)/CodeTools/module.mk $(srcdir)/Concurrency/module.mk $(srcdir)/Common/module.mk $(srcdir)/ControlStruct/module.mk $(srcdir)/GenPoly/module.mk $(srcdir)/InitTweak/module.mk $(srcdir)/Parser/module.mk $(srcdir)/ResolvExpr/module.mk $(srcdir)/SymTab/module.mk $(srcdir)/SynTree/module.mk $(srcdir)/Tuples/module.mk $(srcdir)/Validate/module.mk $(srcdir)/Virtual/module.mk $(am__empty):
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLIBRARIES:
-	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-AST/$(am__dirstamp):
-	@$(MKDIR_P) AST
-	@: > AST/$(am__dirstamp)
-AST/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) AST/$(DEPDIR)
-	@: > AST/$(DEPDIR)/$(am__dirstamp)
-AST/AssertAcyclic.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/Attribute.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/Convert.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/Decl.$(OBJEXT): AST/$(am__dirstamp) AST/$(DEPDIR)/$(am__dirstamp)
-AST/DeclReplacer.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/Expr.$(OBJEXT): AST/$(am__dirstamp) AST/$(DEPDIR)/$(am__dirstamp)
-AST/ForallSubstitutionTable.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/GenericSubstitution.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/Init.$(OBJEXT): AST/$(am__dirstamp) AST/$(DEPDIR)/$(am__dirstamp)
-AST/LinkageSpec.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/Node.$(OBJEXT): AST/$(am__dirstamp) AST/$(DEPDIR)/$(am__dirstamp)
-AST/Pass.$(OBJEXT): AST/$(am__dirstamp) AST/$(DEPDIR)/$(am__dirstamp)
-AST/Print.$(OBJEXT): AST/$(am__dirstamp) AST/$(DEPDIR)/$(am__dirstamp)
-AST/Stmt.$(OBJEXT): AST/$(am__dirstamp) AST/$(DEPDIR)/$(am__dirstamp)
-AST/SymbolTable.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/Type.$(OBJEXT): AST/$(am__dirstamp) AST/$(DEPDIR)/$(am__dirstamp)
-AST/TypeEnvironment.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-AST/TypeSubstitution.$(OBJEXT): AST/$(am__dirstamp) \
-	AST/$(DEPDIR)/$(am__dirstamp)
-CodeGen/$(am__dirstamp):
-	@$(MKDIR_P) CodeGen
-	@: > CodeGen/$(am__dirstamp)
-CodeGen/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) CodeGen/$(DEPDIR)
-	@: > CodeGen/$(DEPDIR)/$(am__dirstamp)
-CodeGen/CodeGenerator.$(OBJEXT): CodeGen/$(am__dirstamp) \
-	CodeGen/$(DEPDIR)/$(am__dirstamp)
-CodeGen/FixMain.$(OBJEXT): CodeGen/$(am__dirstamp) \
-	CodeGen/$(DEPDIR)/$(am__dirstamp)
-CodeGen/GenType.$(OBJEXT): CodeGen/$(am__dirstamp) \
-	CodeGen/$(DEPDIR)/$(am__dirstamp)
-CodeGen/OperatorTable.$(OBJEXT): CodeGen/$(am__dirstamp) \
-	CodeGen/$(DEPDIR)/$(am__dirstamp)
-Concurrency/$(am__dirstamp):
-	@$(MKDIR_P) Concurrency
-	@: > Concurrency/$(am__dirstamp)
-Concurrency/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) Concurrency/$(DEPDIR)
-	@: > Concurrency/$(DEPDIR)/$(am__dirstamp)
-Concurrency/Keywords.$(OBJEXT): Concurrency/$(am__dirstamp) \
-	Concurrency/$(DEPDIR)/$(am__dirstamp)
-Common/$(am__dirstamp):
-	@$(MKDIR_P) Common
-	@: > Common/$(am__dirstamp)
-Common/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) Common/$(DEPDIR)
-	@: > Common/$(DEPDIR)/$(am__dirstamp)
-Common/Assert.$(OBJEXT): Common/$(am__dirstamp) \
-	Common/$(DEPDIR)/$(am__dirstamp)
-Common/Eval.$(OBJEXT): Common/$(am__dirstamp) \
-	Common/$(DEPDIR)/$(am__dirstamp)
-Common/PassVisitor.$(OBJEXT): Common/$(am__dirstamp) \
-	Common/$(DEPDIR)/$(am__dirstamp)
-Common/SemanticError.$(OBJEXT): Common/$(am__dirstamp) \
-	Common/$(DEPDIR)/$(am__dirstamp)
-Common/Stats/$(am__dirstamp):
-	@$(MKDIR_P) Common/Stats
-	@: > Common/Stats/$(am__dirstamp)
-Common/Stats/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) Common/Stats/$(DEPDIR)
-	@: > Common/Stats/$(DEPDIR)/$(am__dirstamp)
-Common/Stats/Counter.$(OBJEXT): Common/Stats/$(am__dirstamp) \
-	Common/Stats/$(DEPDIR)/$(am__dirstamp)
-Common/Stats/Heap.$(OBJEXT): Common/Stats/$(am__dirstamp) \
-	Common/Stats/$(DEPDIR)/$(am__dirstamp)
-Common/Stats/Stats.$(OBJEXT): Common/Stats/$(am__dirstamp) \
-	Common/Stats/$(DEPDIR)/$(am__dirstamp)
-Common/Stats/Time.$(OBJEXT): Common/Stats/$(am__dirstamp) \
-	Common/Stats/$(DEPDIR)/$(am__dirstamp)
-Common/UniqueName.$(OBJEXT): Common/$(am__dirstamp) \
-	Common/$(DEPDIR)/$(am__dirstamp)
-ControlStruct/$(am__dirstamp):
-	@$(MKDIR_P) ControlStruct
-	@: > ControlStruct/$(am__dirstamp)
-ControlStruct/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) ControlStruct/$(DEPDIR)
-	@: > ControlStruct/$(DEPDIR)/$(am__dirstamp)
-ControlStruct/ForExprMutator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
-	ControlStruct/$(DEPDIR)/$(am__dirstamp)
-ControlStruct/LabelFixer.$(OBJEXT): ControlStruct/$(am__dirstamp) \
-	ControlStruct/$(DEPDIR)/$(am__dirstamp)
-ControlStruct/LabelGenerator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
-	ControlStruct/$(DEPDIR)/$(am__dirstamp)
-ControlStruct/MLEMutator.$(OBJEXT): ControlStruct/$(am__dirstamp) \
-	ControlStruct/$(DEPDIR)/$(am__dirstamp)
-ControlStruct/Mutate.$(OBJEXT): ControlStruct/$(am__dirstamp) \
-	ControlStruct/$(DEPDIR)/$(am__dirstamp)
-GenPoly/$(am__dirstamp):
-	@$(MKDIR_P) GenPoly
-	@: > GenPoly/$(am__dirstamp)
-GenPoly/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) GenPoly/$(DEPDIR)
-	@: > GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/GenPoly.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/Lvalue.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
-InitTweak/$(am__dirstamp):
-	@$(MKDIR_P) InitTweak
-	@: > InitTweak/$(am__dirstamp)
-InitTweak/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) InitTweak/$(DEPDIR)
-	@: > InitTweak/$(DEPDIR)/$(am__dirstamp)
-InitTweak/GenInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
-	InitTweak/$(DEPDIR)/$(am__dirstamp)
-InitTweak/InitTweak.$(OBJEXT): InitTweak/$(am__dirstamp) \
-	InitTweak/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/$(am__dirstamp):
-	@$(MKDIR_P) ResolvExpr
-	@: > ResolvExpr/$(am__dirstamp)
-ResolvExpr/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) ResolvExpr/$(DEPDIR)
-	@: > ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/AdjustExprType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/Alternative.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/AlternativeFinder.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/Candidate.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/CandidateFinder.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/CastCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/CommonType.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/ConversionCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/CurrentObject.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/ExplodedActual.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/ExplodedArg.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/FindOpenVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/Occurs.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/PolyCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/PtrsAssignable.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/PtrsCastable.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/RenameVars.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/ResolveAssertions.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/Resolver.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/ResolveTypeof.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/SatisfyAssertions.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/SpecCost.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/TypeEnvironment.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/Unify.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-SymTab/$(am__dirstamp):
-	@$(MKDIR_P) SymTab
-	@: > SymTab/$(am__dirstamp)
-SymTab/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) SymTab/$(DEPDIR)
-	@: > SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/Autogen.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/FixFunction.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/Indexer.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/Mangler.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/ManglerCommon.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/Validate.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SymTab/Demangle.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-SynTree/$(am__dirstamp):
-	@$(MKDIR_P) SynTree
-	@: > SynTree/$(am__dirstamp)
-SynTree/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) SynTree/$(DEPDIR)
-	@: > SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/AddressExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/AggregateDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ApplicationExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ArrayType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/AttrType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Attribute.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/BasicType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/CommaExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/CompoundStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Constant.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/DeclReplacer.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/DeclStmt.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Declaration.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/DeclarationWithType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Expression.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/FunctionDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/FunctionType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Initializer.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/LinkageSpec.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/NamedTypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ObjectDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/PointerType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ReferenceToType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ReferenceType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Statement.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TupleExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TupleType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/Type.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TypeDecl.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TypeExpr.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TypeSubstitution.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/TypeofType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/VarArgsType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/VoidType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-SynTree/ZeroOneType.$(OBJEXT): SynTree/$(am__dirstamp) \
-	SynTree/$(DEPDIR)/$(am__dirstamp)
-Tuples/$(am__dirstamp):
-	@$(MKDIR_P) Tuples
-	@: > Tuples/$(am__dirstamp)
-Tuples/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) Tuples/$(DEPDIR)
-	@: > Tuples/$(DEPDIR)/$(am__dirstamp)
-Tuples/TupleAssignment.$(OBJEXT): Tuples/$(am__dirstamp) \
-	Tuples/$(DEPDIR)/$(am__dirstamp)
-Tuples/TupleExpansion.$(OBJEXT): Tuples/$(am__dirstamp) \
-	Tuples/$(DEPDIR)/$(am__dirstamp)
-Tuples/Explode.$(OBJEXT): Tuples/$(am__dirstamp) \
-	Tuples/$(DEPDIR)/$(am__dirstamp)
-Tuples/Tuples.$(OBJEXT): Tuples/$(am__dirstamp) \
-	Tuples/$(DEPDIR)/$(am__dirstamp)
-Validate/$(am__dirstamp):
-	@$(MKDIR_P) Validate
-	@: > Validate/$(am__dirstamp)
-Validate/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) Validate/$(DEPDIR)
-	@: > Validate/$(DEPDIR)/$(am__dirstamp)
-Validate/HandleAttributes.$(OBJEXT): Validate/$(am__dirstamp) \
-	Validate/$(DEPDIR)/$(am__dirstamp)
-Validate/FindSpecialDecls.$(OBJEXT): Validate/$(am__dirstamp) \
-	Validate/$(DEPDIR)/$(am__dirstamp)
-
-libdemangle.a: $(libdemangle_a_OBJECTS) $(libdemangle_a_DEPENDENCIES) $(EXTRA_libdemangle_a_DEPENDENCIES) 
-	$(AM_V_at)-rm -f libdemangle.a
-	$(AM_V_AR)$(libdemangle_a_AR) libdemangle.a $(libdemangle_a_OBJECTS) $(libdemangle_a_LIBADD)
-	$(AM_V_at)$(RANLIB) libdemangle.a
-install-cfa_cpplibPROGRAMS: $(cfa_cpplib_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	@list='$(cfa_cpplib_PROGRAMS)'; test -n "$(cfa_cpplibdir)" || list=; \
-	if test -n "$$list"; then \
-	  echo " $(MKDIR_P) '$(DESTDIR)$(cfa_cpplibdir)'"; \
-	  $(MKDIR_P) "$(DESTDIR)$(cfa_cpplibdir)" || exit 1; \
-	fi; \
-	for p in $$list; do echo "$$p $$p"; done | \
-	sed 's/$(EXEEXT)$$//' | \
-	while read p p1; do if test -f $$p \
-	 || test -f $$p1 \
-	  ; then echo "$$p"; echo "$$p"; else :; fi; \
-	done | \
-	sed -e 'p;s,.*/,,;n;h' \
-	    -e 's|.*|.|' \
-	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
-	sed 'N;N;N;s,\n, ,g' | \
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
-	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
-	    else { print "f", $$3 "/" $$4, $$1; } } \
-	  END { for (d in files) print "f", d, files[d] }' | \
-	while read type dir files; do \
-	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
-	    test -z "$$files" || { \
-	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(cfa_cpplibdir)$$dir'"; \
-	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(cfa_cpplibdir)$$dir" || exit $$?; \
-	    } \
-	; done
-
-uninstall-cfa_cpplibPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(cfa_cpplib_PROGRAMS)'; test -n "$(cfa_cpplibdir)" || list=; \
-	files=`for p in $$list; do echo "$$p"; done | \
-	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-	      -e 's/$$/$(EXEEXT)/' \
-	`; \
-	test -n "$$list" || exit 0; \
-	echo " ( cd '$(DESTDIR)$(cfa_cpplibdir)' && rm -f" $$files ")"; \
-	cd "$(DESTDIR)$(cfa_cpplibdir)" && rm -f $$files
-
-clean-cfa_cpplibPROGRAMS:
-	@list='$(cfa_cpplib_PROGRAMS)'; test -n "$$list" || exit 0; \
-	echo " rm -f" $$list; \
-	rm -f $$list || exit $$?; \
-	test -n "$(EXEEXT)" || exit 0; \
-	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-	echo " rm -f" $$list; \
-	rm -f $$list
-CodeGen/Generate.$(OBJEXT): CodeGen/$(am__dirstamp) \
-	CodeGen/$(DEPDIR)/$(am__dirstamp)
-CodeGen/FixNames.$(OBJEXT): CodeGen/$(am__dirstamp) \
-	CodeGen/$(DEPDIR)/$(am__dirstamp)
-CodeTools/$(am__dirstamp):
-	@$(MKDIR_P) CodeTools
-	@: > CodeTools/$(am__dirstamp)
-CodeTools/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) CodeTools/$(DEPDIR)
-	@: > CodeTools/$(DEPDIR)/$(am__dirstamp)
-CodeTools/DeclStats.$(OBJEXT): CodeTools/$(am__dirstamp) \
-	CodeTools/$(DEPDIR)/$(am__dirstamp)
-CodeTools/ResolvProtoDump.$(OBJEXT): CodeTools/$(am__dirstamp) \
-	CodeTools/$(DEPDIR)/$(am__dirstamp)
-CodeTools/TrackLoc.$(OBJEXT): CodeTools/$(am__dirstamp) \
-	CodeTools/$(DEPDIR)/$(am__dirstamp)
-Concurrency/Waitfor.$(OBJEXT): Concurrency/$(am__dirstamp) \
-	Concurrency/$(DEPDIR)/$(am__dirstamp)
-Common/DebugMalloc.$(OBJEXT): Common/$(am__dirstamp) \
-	Common/$(DEPDIR)/$(am__dirstamp)
-ControlStruct/ExceptTranslate.$(OBJEXT):  \
-	ControlStruct/$(am__dirstamp) \
-	ControlStruct/$(DEPDIR)/$(am__dirstamp)
-GenPoly/Box.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/ScrubTyVars.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/Specialize.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/FindFunction.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
-GenPoly/InstantiateGeneric.$(OBJEXT): GenPoly/$(am__dirstamp) \
-	GenPoly/$(DEPDIR)/$(am__dirstamp)
-InitTweak/FixInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
-	InitTweak/$(DEPDIR)/$(am__dirstamp)
-InitTweak/FixGlobalInit.$(OBJEXT): InitTweak/$(am__dirstamp) \
-	InitTweak/$(DEPDIR)/$(am__dirstamp)
-Parser/$(am__dirstamp):
-	@$(MKDIR_P) Parser
-	@: > Parser/$(am__dirstamp)
-Parser/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) Parser/$(DEPDIR)
-	@: > Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/DeclarationNode.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/ExpressionNode.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/InitializerNode.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/ParseNode.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/StatementNode.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/TypeData.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/TypedefTable.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/lex.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/parser.hh: Parser/parser.cc
-	@if test ! -f $@; then rm -f Parser/parser.cc; else :; fi
-	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) Parser/parser.cc; else :; fi
-Parser/parser.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-Parser/parserutility.$(OBJEXT): Parser/$(am__dirstamp) \
-	Parser/$(DEPDIR)/$(am__dirstamp)
-ResolvExpr/AlternativePrinter.$(OBJEXT): ResolvExpr/$(am__dirstamp) \
-	ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-Virtual/$(am__dirstamp):
-	@$(MKDIR_P) Virtual
-	@: > Virtual/$(am__dirstamp)
-Virtual/$(DEPDIR)/$(am__dirstamp):
-	@$(MKDIR_P) Virtual/$(DEPDIR)
-	@: > Virtual/$(DEPDIR)/$(am__dirstamp)
-Virtual/ExpandCasts.$(OBJEXT): Virtual/$(am__dirstamp) \
-	Virtual/$(DEPDIR)/$(am__dirstamp)
-../driver/$(am__dirstamp):
-	@$(MKDIR_P) ../driver
-	@: > ../driver/$(am__dirstamp)
-
-../driver/cfa-cpp$(EXEEXT): $(___driver_cfa_cpp_OBJECTS) $(___driver_cfa_cpp_DEPENDENCIES) $(EXTRA____driver_cfa_cpp_DEPENDENCIES) ../driver/$(am__dirstamp)
-	@rm -f ../driver/cfa-cpp$(EXEEXT)
-	$(AM_V_CXXLD)$(CXXLINK) $(___driver_cfa_cpp_OBJECTS) $(___driver_cfa_cpp_LDADD) $(LIBS)
-SymTab/demangler.$(OBJEXT): SymTab/$(am__dirstamp) \
-	SymTab/$(DEPDIR)/$(am__dirstamp)
-
-demangler$(EXEEXT): $(demangler_OBJECTS) $(demangler_DEPENDENCIES) $(EXTRA_demangler_DEPENDENCIES) 
-	@rm -f demangler$(EXEEXT)
-	$(AM_V_CXXLD)$(CXXLINK) $(demangler_OBJECTS) $(demangler_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-	-rm -f AST/*.$(OBJEXT)
-	-rm -f CodeGen/*.$(OBJEXT)
-	-rm -f CodeTools/*.$(OBJEXT)
-	-rm -f Common/*.$(OBJEXT)
-	-rm -f Common/Stats/*.$(OBJEXT)
-	-rm -f Concurrency/*.$(OBJEXT)
-	-rm -f ControlStruct/*.$(OBJEXT)
-	-rm -f GenPoly/*.$(OBJEXT)
-	-rm -f InitTweak/*.$(OBJEXT)
-	-rm -f Parser/*.$(OBJEXT)
-	-rm -f ResolvExpr/*.$(OBJEXT)
-	-rm -f SymTab/*.$(OBJEXT)
-	-rm -f SynTree/*.$(OBJEXT)
-	-rm -f Tuples/*.$(OBJEXT)
-	-rm -f Validate/*.$(OBJEXT)
-	-rm -f Virtual/*.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CompilationState.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MakeLibCfa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/AssertAcyclic.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Attribute.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Convert.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Decl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/DeclReplacer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Expr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/ForallSubstitutionTable.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/GenericSubstitution.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/LinkageSpec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Node.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Pass.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Print.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Stmt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/SymbolTable.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/Type.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/TypeEnvironment.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@AST/$(DEPDIR)/TypeSubstitution.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/CodeGenerator.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/FixMain.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/FixNames.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/GenType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/Generate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeGen/$(DEPDIR)/OperatorTable.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/DeclStats.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/ResolvProtoDump.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@CodeTools/$(DEPDIR)/TrackLoc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/Assert.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/DebugMalloc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/Eval.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/PassVisitor.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/SemanticError.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/UniqueName.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/Stats/$(DEPDIR)/Counter.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/Stats/$(DEPDIR)/Heap.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/Stats/$(DEPDIR)/Stats.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Common/Stats/$(DEPDIR)/Time.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Concurrency/$(DEPDIR)/Keywords.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Concurrency/$(DEPDIR)/Waitfor.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/ExceptTranslate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/ForExprMutator.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/LabelFixer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/LabelGenerator.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/MLEMutator.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/Mutate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/Box.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/FindFunction.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/GenPoly.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/InstantiateGeneric.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/Lvalue.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/ScrubTyVars.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/Specialize.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@InitTweak/$(DEPDIR)/FixGlobalInit.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@InitTweak/$(DEPDIR)/FixInit.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@InitTweak/$(DEPDIR)/GenInit.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@InitTweak/$(DEPDIR)/InitTweak.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/DeclarationNode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/ExpressionNode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/InitializerNode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/ParseNode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/StatementNode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/TypeData.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/TypedefTable.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/lex.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/parser.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/parserutility.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/AdjustExprType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/Alternative.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/AlternativeFinder.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/AlternativePrinter.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/Candidate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/CandidateFinder.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/CastCost.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/CommonType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/ConversionCost.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/CurrentObject.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/ExplodedActual.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/ExplodedArg.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/FindOpenVars.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/Occurs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/PolyCost.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/PtrsAssignable.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/PtrsCastable.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/RenameVars.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/ResolveAssertions.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/ResolveTypeof.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/Resolver.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/SatisfyAssertions.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/SpecCost.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/TypeEnvironment.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/Unify.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Autogen.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Demangle.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/FixFunction.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Indexer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Mangler.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/ManglerCommon.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/Validate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SymTab/$(DEPDIR)/demangler.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/AddressExpr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/AggregateDecl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/ApplicationExpr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/ArrayType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/AttrType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/Attribute.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/BasicType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/CommaExpr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/CompoundStmt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/Constant.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/DeclReplacer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/DeclStmt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/Declaration.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/DeclarationWithType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/Expression.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/FunctionDecl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/FunctionType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/Initializer.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/LinkageSpec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/NamedTypeDecl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/ObjectDecl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/PointerType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/ReferenceToType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/ReferenceType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/Statement.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TupleExpr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TupleType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/Type.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TypeDecl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TypeExpr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TypeSubstitution.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/TypeofType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/VarArgsType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/VoidType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@SynTree/$(DEPDIR)/ZeroOneType.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/Explode.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/TupleAssignment.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/TupleExpansion.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Tuples/$(DEPDIR)/Tuples.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Validate/$(DEPDIR)/FindSpecialDecls.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Validate/$(DEPDIR)/HandleAttributes.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@Virtual/$(DEPDIR)/ExpandCasts.Po@am__quote@
-
-.cc.o:
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cc.obj:
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cc.lo:
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-.cpp.o:
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@	$(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCXX_TRUE@	$(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-.ll.cc:
-	$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
-
-.yy.cc:
-	$(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-	-rm -rf ../driver/.libs ../driver/_libs
-
-ID: $(am__tagged_files)
-	$(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	set x; \
-	here=`pwd`; \
-	$(am__define_uniq_tagged_files); \
-	shift; \
-	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  if test $$# -gt 0; then \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      "$$@" $$unique; \
-	  else \
-	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	      $$unique; \
-	  fi; \
-	fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-	$(am__define_uniq_tagged_files); \
-	test -z "$(CTAGS_ARGS)$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && $(am__cd) $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
-	list='$(am__tagged_files)'; \
-	case "$(srcdir)" in \
-	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-	  *) sdir=$(subdir)/$(srcdir) ;; \
-	esac; \
-	for i in $$list; do \
-	  if test -f "$$i"; then \
-	    echo "$(subdir)/$$i"; \
-	  else \
-	    echo "$$sdir/$$i"; \
-	  fi; \
-	done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d "$(distdir)/$$file"; then \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-	    fi; \
-	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-	  else \
-	    test -f "$(distdir)/$$file" \
-	    || cp -p $$d/$$file "$(distdir)/$$file" \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LIBRARIES) $(PROGRAMS)
-installdirs:
-	for dir in "$(DESTDIR)$(cfa_cpplibdir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	if test -z '$(STRIP)'; then \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	      install; \
-	else \
-	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-	fi
-mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-	-rm -f ../driver/$(am__dirstamp)
-	-rm -f AST/$(DEPDIR)/$(am__dirstamp)
-	-rm -f AST/$(am__dirstamp)
-	-rm -f CodeGen/$(DEPDIR)/$(am__dirstamp)
-	-rm -f CodeGen/$(am__dirstamp)
-	-rm -f CodeTools/$(DEPDIR)/$(am__dirstamp)
-	-rm -f CodeTools/$(am__dirstamp)
-	-rm -f Common/$(DEPDIR)/$(am__dirstamp)
-	-rm -f Common/$(am__dirstamp)
-	-rm -f Common/Stats/$(DEPDIR)/$(am__dirstamp)
-	-rm -f Common/Stats/$(am__dirstamp)
-	-rm -f Concurrency/$(DEPDIR)/$(am__dirstamp)
-	-rm -f Concurrency/$(am__dirstamp)
-	-rm -f ControlStruct/$(DEPDIR)/$(am__dirstamp)
-	-rm -f ControlStruct/$(am__dirstamp)
-	-rm -f GenPoly/$(DEPDIR)/$(am__dirstamp)
-	-rm -f GenPoly/$(am__dirstamp)
-	-rm -f InitTweak/$(DEPDIR)/$(am__dirstamp)
-	-rm -f InitTweak/$(am__dirstamp)
-	-rm -f Parser/$(DEPDIR)/$(am__dirstamp)
-	-rm -f Parser/$(am__dirstamp)
-	-rm -f ResolvExpr/$(DEPDIR)/$(am__dirstamp)
-	-rm -f ResolvExpr/$(am__dirstamp)
-	-rm -f SymTab/$(DEPDIR)/$(am__dirstamp)
-	-rm -f SymTab/$(am__dirstamp)
-	-rm -f SynTree/$(DEPDIR)/$(am__dirstamp)
-	-rm -f SynTree/$(am__dirstamp)
-	-rm -f Tuples/$(DEPDIR)/$(am__dirstamp)
-	-rm -f Tuples/$(am__dirstamp)
-	-rm -f Validate/$(DEPDIR)/$(am__dirstamp)
-	-rm -f Validate/$(am__dirstamp)
-	-rm -f Virtual/$(DEPDIR)/$(am__dirstamp)
-	-rm -f Virtual/$(am__dirstamp)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-rm -f Parser/lex.cc
-	-rm -f Parser/parser.cc
-	-rm -f Parser/parser.hh
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-cfa_cpplibPROGRAMS clean-generic clean-libtool \
-	clean-noinstLIBRARIES mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR) AST/$(DEPDIR) CodeGen/$(DEPDIR) CodeTools/$(DEPDIR) Common/$(DEPDIR) Common/Stats/$(DEPDIR) Concurrency/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR) Validate/$(DEPDIR) Virtual/$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-cfa_cpplibPROGRAMS
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR) AST/$(DEPDIR) CodeGen/$(DEPDIR) CodeTools/$(DEPDIR) Common/$(DEPDIR) Common/Stats/$(DEPDIR) Concurrency/$(DEPDIR) ControlStruct/$(DEPDIR) GenPoly/$(DEPDIR) InitTweak/$(DEPDIR) Parser/$(DEPDIR) ResolvExpr/$(DEPDIR) SymTab/$(DEPDIR) SynTree/$(DEPDIR) Tuples/$(DEPDIR) Validate/$(DEPDIR) Virtual/$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-cfa_cpplibPROGRAMS
-
-.MAKE: all check install install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
-	clean-cfa_cpplibPROGRAMS clean-generic clean-libtool \
-	clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-cfa_cpplibPROGRAMS install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
-	install-exec-am install-html install-html-am install-info \
-	install-info-am install-man install-pdf install-pdf-am \
-	install-ps install-ps-am install-strip installcheck \
-	installcheck-am installdirs maintainer-clean \
-	maintainer-clean-generic mostlyclean mostlyclean-compile \
-	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-	tags tags-am uninstall uninstall-am \
-	uninstall-cfa_cpplibPROGRAMS
-
-.PRECIOUS: Makefile
-
-
-$(addprefix $(srcdir)/, ResolvExpr/ConversionCost.cc ResolvExpr/CommonType.cc SymTab/ManglerCommon.cc) : $(srcdir)/SynTree/Type.h
-
-$(srcdir)/AST/Type.hpp : BasicTypes-gen.cc
-	${AM_V_GEN}${CXXCOMPILE} $< -o BasicTypes-gen -Wall -Wextra
-	@./BasicTypes-gen
-	@rm BasicTypes-gen
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Parser/DeclarationNode.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Dec 16 15:32:22 2019
-// Update Count     : 1133
+// Last Modified On : Tue Jun  9 20:26:55 2020
+// Update Count     : 1134
 //
 
@@ -1115,6 +1115,6 @@
 	// SUE's cannot have function specifiers, either
 	//
-	//    inlne _Noreturn struct S { ... };		// disallowed
-	//    inlne _Noreturn enum   E { ... };		// disallowed
+	//    inline _Noreturn struct S { ... };		// disallowed
+	//    inline _Noreturn enum   E { ... };		// disallowed
 	if ( funcSpecs.any() ) {
 		SemanticError( this, "invalid function specifier for " );
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Parser/ExpressionNode.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Dec 18 21:14:58 2019
-// Update Count     : 981
+// Last Modified On : Wed Jul 15 08:24:08 2020
+// Update Count     : 1046
 //
 
@@ -85,5 +85,5 @@
 	} // if
 	// remove "lL" for these cases because it may not imply long
-	str.erase( posn );									// remove length
+	str.erase( posn );									// remove length suffix and "uU"
 } // lnthSuffix
 
@@ -108,9 +108,20 @@
 } // valueToType
 
+static void scanbin( string & str, unsigned long long int & v ) {
+	v = 0;
+	size_t last = str.length() - 1;						// last subscript of constant
+	for ( unsigned int i = 2;; ) {						// ignore prefix
+		if ( str[i] == '1' ) v |= 1;
+		i += 1;
+	  if ( i == last - 1 || (str[i] != '0' && str[i] != '1') ) break;
+		v <<= 1;
+	} // for
+} // scanbin
+
 Expression * build_constantInteger( string & str ) {
 	static const BasicType::Kind kind[2][6] = {
 		// short (h) must be before char (hh) because shorter type has the longer suffix
-		{ BasicType::ShortSignedInt, BasicType::SignedChar, BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt, BasicType::SignedInt128, },
-		{ BasicType::ShortUnsignedInt, BasicType::UnsignedChar, BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt, BasicType::UnsignedInt128, },
+		{ BasicType::ShortSignedInt, BasicType::SignedChar, BasicType::SignedInt, BasicType::LongSignedInt, BasicType::LongLongSignedInt, /* BasicType::SignedInt128 */ BasicType::LongLongSignedInt, },
+		{ BasicType::ShortUnsignedInt, BasicType::UnsignedChar, BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt, /* BasicType::UnsignedInt128 */ BasicType::LongLongUnsignedInt, },
 	};
 
@@ -120,8 +131,7 @@
 	}; // lnthsInt
 
-	unsigned long long int v;							// converted integral value
-	size_t last = str.length() - 1;						// last subscript of constant
-	Expression * ret;
-	//string fred( str );
+	string str2( "0x0" );
+	unsigned long long int v, v2 = 0;					// converted integral value
+	Expression * ret, * ret2;
 
 	int type = -1;										// 0 => short, 1 => char, 2 => int, 3 => long int, 4 => long long int, 5 => int128
@@ -139,68 +149,140 @@
 	} // if
 
+	string::size_type posn;
+
+	// 'u' can appear before or after length suffix
+	if ( str.find_last_of( "uU" ) != string::npos ) Unsigned = true;
+
+	if ( isdigit( str[str.length() - 1] ) ) {			// no suffix ?
+		lnthSuffix( str, type, ltype );					// could have length suffix
+		if ( type == 5 && Unsigned ) str.erase( str.length() - 1 ); // L128 and terminating "uU" ?
+	} else {
+		// At least one digit in integer constant, so safe to backup while looking for suffix.
+
+		posn = str.find_last_of( "pP" );				// pointer value
+		if ( posn != string::npos ) { ltype = 5; str.erase( posn, 1 ); goto FINI; }
+
+		posn = str.find_last_of( "zZ" );				// size_t
+		if ( posn != string::npos ) { Unsigned = true; type = 2; ltype = 4; str.erase( posn, 1 ); goto FINI; }
+
+		posn = str.rfind( "hh" );						// char
+		if ( posn != string::npos ) { type = 1; str.erase( posn, 2 ); goto FINI; }
+
+		posn = str.rfind( "HH" );						// char
+		if ( posn != string::npos ) { type = 1; str.erase( posn, 2 ); goto FINI; }
+
+		posn = str.find_last_of( "hH" );				// short
+		if ( posn != string::npos ) { type = 0; str.erase( posn, 1 ); goto FINI; }
+
+		posn = str.find_last_of( "nN" );				// int (natural number)
+		if ( posn != string::npos ) { type = 2; str.erase( posn, 1 ); goto FINI; }
+
+		if ( str.rfind( "ll" ) != string::npos || str.rfind( "LL" ) != string::npos ) { type = 4; goto FINI; }
+
+		lnthSuffix( str, type, ltype );					// must be after check for "ll"
+	  FINI: ;
+	} // if
+
 	// Cannot be just "0"/"1"; sscanf stops at the suffix, if any; value goes over the wall => always generate
 
+#if ! defined(__SIZEOF_INT128__)
+	if ( type == 5 ) SemanticError( yylloc, "int128 constant is not supported on this target " + str );
+#endif // ! __SIZEOF_INT128__
+	
 	if ( str[0] == '0' ) {								// radix character ?
 		dec = false;
 		if ( checkX( str[1] ) ) {						// hex constant ?
-			sscanf( (char *)str.c_str(), "%llx", &v );
+			if ( type < 5 ) {							// not L128 ?
+				sscanf( (char *)str.c_str(), "%llx", &v );
+			} else {									// hex int128 constant
+				unsigned int len = str.length();
+				if ( len > (2 + 16 + 16) ) SemanticError( yylloc, "128-bit hexadecimal constant to large " + str );
+			  if ( len <= (2 + 16) ) goto FHEX1;		// hex digits < 2^64
+				str2 = "0x" + str.substr( len - 16 );
+				sscanf( (char *)str2.c_str(), "%llx", &v2 );
+				str = str.substr( 0, len - 16 );
+			  FHEX1: ;
+				sscanf( (char *)str.c_str(), "%llx", &v );
+			} // if
 			//printf( "%llx %llu\n", v, v );
 		} else if ( checkB( str[1] ) ) {				// binary constant ?
-			v = 0;										// compute value
-			for ( unsigned int i = 2;; ) {				// ignore prefix
-				if ( str[i] == '1' ) v |= 1;
-				i += 1;
-			  if ( i == last - 1 || (str[i] != '0' && str[i] != '1') ) break;
-				v <<= 1;
-			} // for
+			unsigned int len = str.length();
+			if ( type == 5 && len > 2 + 64 ) {
+				if ( len > 2 + 64 + 64 ) SemanticError( yylloc, "128-bit binary constant to large " + str );
+				str2 = "0b" + str.substr( len - 64 );
+				str = str.substr( 0, len - 64 );
+				scanbin( str2, v2 );
+			} // if
+			scanbin( str, v );
 			//printf( "%#llx %llu\n", v, v );
 		} else {										// octal constant
-			sscanf( (char *)str.c_str(), "%llo", &v );
+			if ( type < 5 ) {							// not L128 ?
+				sscanf( (char *)str.c_str(), "%llo", &v );
+#if defined(__SIZEOF_INT128__)
+			} else {									// octal int128 constant
+				unsigned int len = str.length();
+				if ( len > 1 + 43 || (len == 1 + 43 && str[0] > '3') ) SemanticError( yylloc, "128-bit octal constant to large " + str );
+				if ( len <= 1 + 21 ) {					// value < 21 octal digitis
+					sscanf( (char *)str.c_str(), "%llo", &v ); // leave value in octal
+				} else {
+					sscanf( &str[len - 21], "%llo", &v );
+					__int128 val = v;					// accumulate bits
+					str[len - 21] ='\0';				// shorten string
+					sscanf( &str[len == 43 ? 1 : 0], "%llo", &v );
+					val |= (__int128)v << 63;			// store bits
+					if ( len == 1 + 43 ) {				// most significant 2 bits ?
+						str[2] = '\0';					// shorten string
+						sscanf( &str[1], "%llo", &v );	// process most significant 2 bits
+						val |= (__int128)v << 126;		// store bits
+					} // if
+					v = val >> 64; v2 = (uint64_t)val;	// replace octal constant with 2 hex constants
+					char buf[32];
+					sprintf( buf, "%#llx", v2 );
+					str2 = buf;
+					sprintf( buf, "%#llx", v );
+					str = buf;
+				} // if
+#endif // __SIZEOF_INT128__
+			} // if
 			//printf( "%#llo %llu\n", v, v );
 		} // if
 	} else {											// decimal constant ?
-		sscanf( (char *)str.c_str(), "%llu", &v );
+		if ( type < 5 ) {								// not L128 ?
+			sscanf( (char *)str.c_str(), "%llu", &v );
+#if defined(__SIZEOF_INT128__)
+		} else {										// decimal int128 constant
+			#define P10_UINT64 10'000'000'000'000'000'000ULL // 19 zeroes
+			unsigned int len = str.length();
+			if ( str.length() == 39 && str > (Unsigned ? "340282366920938463463374607431768211455" : "170141183460469231731687303715884105727") )
+				SemanticError( yylloc, "128-bit decimal constant to large " + str );
+			if ( len <= 19 ) {							// value < 19 decimal digitis
+				sscanf( (char *)str.c_str(), "%llu", &v ); // leave value in decimal
+			} else {
+				sscanf( &str[len - 19], "%llu", &v );
+				__int128 val = v;						// accumulate bits
+				str[len - 19] ='\0';					// shorten string
+				sscanf( &str[len == 39 ? 1 : 0], "%llu", &v );
+				val += (__int128)v * (__int128)P10_UINT64; // store bits
+				if ( len == 39 ) {						// most significant 2 bits ?
+					str[1] = '\0';						// shorten string
+					sscanf( &str[0], "%llu", &v );		// process most significant 2 bits
+					val += (__int128)v * (__int128)P10_UINT64 * (__int128)P10_UINT64; // store bits
+				} // if
+				v = val >> 64; v2 = (uint64_t)val;		// replace decimal constant with 2 hex constants
+				char buf[32];
+				sprintf( buf, "%#llx", v2 );
+				str2 = buf;
+				sprintf( buf, "%#llx", v );
+				str = buf;
+			} // if
+#endif // __SIZEOF_INT128__
+		} // if
 		//printf( "%llu\n", v );
 	} // if
 
-	string::size_type posn;
-
-	if ( isdigit( str[last] ) ) {						// no suffix ?
-		lnthSuffix( str, type, ltype );					// could have length suffix
-		if ( type == -1 ) {								// no suffix
-			valueToType( v, dec, type, Unsigned );
-		} // if
-	} else {
-		// At least one digit in integer constant, so safe to backup while looking for suffix.
-
-		posn = str.find_last_of( "pP" );
-		if ( posn != string::npos ) { valueToType( v, dec, type, Unsigned ); ltype = 5; str.erase( posn, 1 ); goto FINI; }
-
-		posn = str.find_last_of( "zZ" );
-		if ( posn != string::npos ) { Unsigned = true; type = 2; ltype = 4; str.erase( posn, 1 ); goto FINI; }
-
-		// 'u' can appear before or after length suffix
-		if ( str.find_last_of( "uU" ) != string::npos ) Unsigned = true;
-
-		posn = str.rfind( "hh" );
-		if ( posn != string::npos ) { type = 1; str.erase( posn, 2 ); goto FINI; }
-
-		posn = str.rfind( "HH" );
-		if ( posn != string::npos ) { type = 1; str.erase( posn, 2 ); goto FINI; }
-
-		posn = str.find_last_of( "hH" );
-		if ( posn != string::npos ) { type = 0; str.erase( posn, 1 ); goto FINI; }
-
-		posn = str.find_last_of( "nN" );
-		if ( posn != string::npos ) { type = 2; str.erase( posn, 1 ); goto FINI; }
-
-		if ( str.rfind( "ll" ) != string::npos || str.rfind( "LL" ) != string::npos ) { type = 4; goto FINI; }
-
-		lnthSuffix( str, type, ltype );					// must be after check for "ll"
-		if ( type == -1 ) {								// only 'u' suffix ?
-			valueToType( v, dec, type, Unsigned );
-		} // if
-	  FINI: ;
-	} // if
+	if ( type == -1 ) {									// no suffix => determine type from value size
+		valueToType( v, dec, type, Unsigned );
+	} // if
+	/* printf( "%s %llo %s %llo\n", str.c_str(), v, str2.c_str(), v2 ); */
 
 	//if ( !( 0 <= type && type <= 6 ) ) { printf( "%s %lu %d %s\n", fred.c_str(), fred.length(), type, str.c_str() ); }
@@ -214,5 +296,8 @@
 	} else if ( ltype != -1 ) {							// explicit length ?
 		if ( ltype == 6 ) {								// int128, (int128)constant
-			ret = new CastExpr( ret, new BasicType( Type::Qualifiers(), kind[Unsigned][type] ), false );
+//			ret = new CastExpr( ret, new BasicType( Type::Qualifiers(), kind[Unsigned][type] ), false );
+			ret2 = new ConstantExpr( Constant( new BasicType( noQualifiers, BasicType::LongLongSignedInt ), str2, v2 ) );
+			ret = build_compoundLiteral( DeclarationNode::newBasicType( DeclarationNode::Int128 )->addType( DeclarationNode::newSignedNess( DeclarationNode::Unsigned ) ),
+										 new InitializerNode( (InitializerNode *)(new InitializerNode( new ExpressionNode( v2 == 0 ? ret2 : ret ) ))->set_last( new InitializerNode( new ExpressionNode( v2 == 0 ? ret : ret2 ) ) ), true ) );
 		} else {										// explicit length, (length_type)constant
 			ret = new CastExpr( ret, new TypeInstType( Type::Qualifiers(), lnthsInt[Unsigned][ltype], false ), false );
@@ -342,15 +427,15 @@
 		if ( str[1] == '8' ) goto Default;				// utf-8 characters => array of char
 		// lookup type of associated typedef
-		strtype = new TypeInstType( Type::Qualifiers( Type::Const ), "char16_t", false );
+		strtype = new TypeInstType( Type::Qualifiers( ), "char16_t", false );
 		break;
 	  case 'U':
-		strtype = new TypeInstType( Type::Qualifiers( Type::Const ), "char32_t", false );
+		strtype = new TypeInstType( Type::Qualifiers( ), "char32_t", false );
 		break;
 	  case 'L':
-		strtype = new TypeInstType( Type::Qualifiers( Type::Const ), "wchar_t", false );
+		strtype = new TypeInstType( Type::Qualifiers( ), "wchar_t", false );
 		break;
 	  Default:											// char default string type
 	  default:
-		strtype = new BasicType( Type::Qualifiers( Type::Const ), BasicType::Char );
+		strtype = new BasicType( Type::Qualifiers( ), BasicType::Char );
 	} // switch
 	ArrayType * at = new ArrayType( noQualifiers, strtype,
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Parser/ParseNode.h	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Feb  7 17:56:02 2020
-// Update Count     : 891
+// Last Modified On : Mon Jul  6 09:33:32 2020
+// Update Count     : 892
 //
 
@@ -86,5 +86,5 @@
 class InitializerNode : public ParseNode {
   public:
-	InitializerNode( ExpressionNode *, bool aggrp = false,  ExpressionNode * des = nullptr );
+	InitializerNode( ExpressionNode *, bool aggrp = false, ExpressionNode * des = nullptr );
 	InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode * des = nullptr );
 	InitializerNode( bool isDelete );
Index: src/Parser/module.mk
===================================================================
--- src/Parser/module.mk	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Parser/module.mk	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -17,5 +17,5 @@
 BUILT_SOURCES = Parser/parser.hh
 
-AM_YFLAGS = -d -t -v
+AM_YFLAGS = -d -t -v -Wno-yacc
 
 SRC += \
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Parser/parser.yy	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 27 12:25:42 2020
-// Update Count     : 4483
+// Last Modified On : Thu May 28 12:11:45 2020
+// Update Count     : 4500
 //
 
@@ -329,5 +329,5 @@
 %type<en> conditional_expression		constant_expression			assignment_expression		assignment_expression_opt
 %type<en> comma_expression				comma_expression_opt
-%type<en> argument_expression_list		argument_expression			default_initialize_opt
+%type<en> argument_expression_list_opt		argument_expression			default_initialize_opt
 %type<ifctl> if_control_expression
 %type<fctl> for_control_expression		for_control_expression_list
@@ -624,5 +624,5 @@
 		// equivalent to the old x[i,j].
 		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $3 ) ); }
-	| postfix_expression '{' argument_expression_list '}' // CFA, constructor call
+	| postfix_expression '{' argument_expression_list_opt '}' // CFA, constructor call
 		{
 			Token fn;
@@ -630,5 +630,5 @@
 			$$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );
 		}
-	| postfix_expression '(' argument_expression_list ')'
+	| postfix_expression '(' argument_expression_list_opt ')'
 		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
 	| postfix_expression '`' identifier					// CFA, postfix call
@@ -662,5 +662,5 @@
 	| '(' type_no_function ')' '@' '{' initializer_list_opt comma_opt '}' // CFA, explicit C compound-literal
 		{ $$ = new ExpressionNode( build_compoundLiteral( $2, (new InitializerNode( $6, true ))->set_maybeConstructed( false ) ) ); }
-	| '^' primary_expression '{' argument_expression_list '}' // CFA, destructor call
+	| '^' primary_expression '{' argument_expression_list_opt '}' // CFA, destructor call
 		{
 			Token fn;
@@ -670,9 +670,9 @@
 	;
 
-argument_expression_list:
+argument_expression_list_opt:
 	// empty
 		{ $$ = nullptr; }
 	| argument_expression
-	| argument_expression_list ',' argument_expression
+	| argument_expression_list_opt ',' argument_expression
 		{ $$ = (ExpressionNode *)($1->set_last( $3 )); }
 	;
@@ -1196,5 +1196,5 @@
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
 						OperKinds::LThan, $1->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
-	| '=' comma_expression									// CFA
+	| '=' comma_expression								// CFA
 		{ $$ = forCtrl( $2, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
 						OperKinds::LEThan, $2->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
@@ -1203,8 +1203,10 @@
 	| comma_expression inclexcl comma_expression '~' comma_expression // CFA
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, $5 ); }
+	| comma_expression ';'								// CFA
+		{ $$ = forCtrl( new ExpressionNode( build_constantInteger( *new string( "0u" ) ) ), $1, nullptr, OperKinds::LThan, nullptr, nullptr ); }
 	| comma_expression ';' comma_expression				// CFA
 		{ $$ = forCtrl( $3, $1, new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
 						OperKinds::LThan, $3->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
-	| comma_expression ';' '=' comma_expression				// CFA
+	| comma_expression ';' '=' comma_expression			// CFA
 		{ $$ = forCtrl( $4, $1, new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
 						OperKinds::LEThan, $4->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
@@ -1304,5 +1306,5 @@
 // If MUTEX becomes a general qualifier, there are shift/reduce conflicts, so change syntax to "with mutex".
 mutex_statement:
-	MUTEX '(' argument_expression_list ')' statement
+	MUTEX '(' argument_expression_list_opt ')' statement
 		{ SemanticError( yylloc, "Mutex statement is currently unimplemented." ); $$ = nullptr; }
 	;
@@ -1321,7 +1323,7 @@
 	WAITFOR '(' cast_expression ')'
 		{ $$ = $3; }
-//	| WAITFOR '(' cast_expression ',' argument_expression_list ')'
+//	| WAITFOR '(' cast_expression ',' argument_expression_list_opt ')'
 //	  	{ $$ = (ExpressionNode *)$3->set_last( $5 ); }
-	| WAITFOR '(' cast_expression_list ':' argument_expression_list ')'
+	| WAITFOR '(' cast_expression_list ':' argument_expression_list_opt ')'
 		{ $$ = (ExpressionNode *)($3->set_last( $5 )); }
 	;
@@ -1330,5 +1332,6 @@
 	cast_expression
 	| cast_expression_list ',' cast_expression
-		{ $$ = (ExpressionNode *)($1->set_last( $3 )); }
+		// { $$ = (ExpressionNode *)($1->set_last( $3 )); }
+		{ SemanticError( yylloc, "List of mutex member is currently unimplemented." ); $$ = nullptr; }
 	;
 
@@ -2095,17 +2098,19 @@
 
 aggregate_control:										// CFA
-	GENERATOR
+	MONITOR
+		{ yyy = true; $$ = AggregateDecl::Monitor; }
+	| MUTEX STRUCT
+		{ yyy = true; $$ = AggregateDecl::Monitor; }
+	| GENERATOR
 		{ yyy = true; $$ = AggregateDecl::Generator; }
-	| MONITOR GENERATOR
+	| MUTEX GENERATOR
 		{ SemanticError( yylloc, "monitor generator is currently unimplemented." ); $$ = AggregateDecl::NoAggregate; }
 	| COROUTINE
 		{ yyy = true; $$ = AggregateDecl::Coroutine; }
-	| MONITOR
-		{ yyy = true; $$ = AggregateDecl::Monitor; }
-	| MONITOR COROUTINE
+	| MUTEX COROUTINE
 		{ SemanticError( yylloc, "monitor coroutine is currently unimplemented." ); $$ = AggregateDecl::NoAggregate; }
 	| THREAD
 		{ yyy = true; $$ = AggregateDecl::Thread; }
-	| MONITOR THREAD
+	| MUTEX THREAD
 		{ SemanticError( yylloc, "monitor thread is currently unimplemented." ); $$ = AggregateDecl::NoAggregate; }
 	;
@@ -2774,5 +2779,5 @@
 	| attr_name
 		{ $$ = DeclarationNode::newAttribute( $1 ); }
-	| attr_name '(' argument_expression_list ')'
+	| attr_name '(' argument_expression_list_opt ')'
 		{ $$ = DeclarationNode::newAttribute( $1, $3 ); }
 	;
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -1216,6 +1216,8 @@
 			unify( castExpr->result, alt.expr->result, alt.env, needAssertions,
 				haveAssertions, openVars, indexer );
-			Cost thisCost = castCost( alt.expr->result, castExpr->result, alt.expr->get_lvalue(),
-				indexer, alt.env );
+			Cost thisCost =
+				castExpr->isGenerated
+				? conversionCost( alt.expr->result, castExpr->result, alt.expr->get_lvalue(),	indexer, alt.env )
+				: castCost( alt.expr->result, castExpr->result, alt.expr->get_lvalue(),	indexer, alt.env );
 			PRINT(
 				std::cerr << "working on cast with result: " << castExpr->result << std::endl;
@@ -1698,9 +1700,23 @@
 
 				// unification run for side-effects
-				unify( toType, alt.expr->result, newEnv, need, have, openVars, indexer );
+				bool canUnify = unify( toType, alt.expr->result, newEnv, need, have, openVars, indexer );
+				(void) canUnify;
 				// xxx - do some inspecting on this line... why isn't result bound to initAlt.type?
 
-				Cost thisCost = castCost( alt.expr->result, toType, alt.expr->get_lvalue(),
+				Cost thisCost = computeConversionCost( alt.expr->result, toType, alt.expr->get_lvalue(),
 					indexer, newEnv );
+
+				PRINT(
+					Cost legacyCost = castCost( alt.expr->result, toType, alt.expr->get_lvalue(),
+						indexer, newEnv );
+					std::cerr << "Considering initialization:";
+					std::cerr << std::endl << "  FROM: "; alt.expr->result->print(std::cerr);
+					std::cerr << std::endl << "  TO: ";   toType          ->print(std::cerr);
+					std::cerr << std::endl << "  Unification " << (canUnify ? "succeeded" : "failed");
+					std::cerr << std::endl << "  Legacy cost " << legacyCost;
+					std::cerr << std::endl << "  New cost " << thisCost;
+					std::cerr << std::endl;
+				)
+				
 				if ( thisCost != Cost::infinity ) {
 					// count one safe conversion for each value that is thrown away
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/ResolvExpr/ConversionCost.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -10,5 +10,5 @@
 // Created On       : Sun May 17 07:06:19 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Fri Oct  4 14:45:00 2019
+// Last Modified On : Wed Jul 29 16:11:00 2020
 // Update Count     : 28
 //
@@ -392,24 +392,4 @@
 	void ConversionCost::postvisit( const FunctionType * ) {}
 
-	void ConversionCost::postvisit( const StructInstType * inst ) {
-		/*
-		if ( const StructInstType * destAsInst = dynamic_cast< const StructInstType * >( dest ) ) {
-			if ( inst->name == destAsInst->name ) {
-				cost = Cost::zero;
-			} // if
-		} // if
-		*/
-	}
-
-	void ConversionCost::postvisit( const UnionInstType * inst ) {
-		/*
-		if ( const UnionInstType * destAsInst = dynamic_cast< const UnionInstType * >( dest ) ) {
-			if ( inst->name == destAsInst->name ) {
-				cost = Cost::zero;
-			} // if
-		} // if
-		*/
-	}
-
 	void ConversionCost::postvisit( const EnumInstType * ) {
 		static Type::Qualifiers q;
@@ -685,26 +665,4 @@
 }
 
-void ConversionCost_new::postvisit( const ast::StructInstType * structInstType ) {
-	/*
-	if ( const ast::StructInstType * dstAsInst =
-			dynamic_cast< const ast::StructInstType * >( dst ) ) {
-		if ( structInstType->name == dstAsInst->name ) {
-			cost = Cost::zero;
-		}
-	}
-	*/
-}
-
-void ConversionCost_new::postvisit( const ast::UnionInstType * unionInstType ) {
-	/*
-	if ( const ast::UnionInstType * dstAsInst =
-			dynamic_cast< const ast::UnionInstType * >( dst ) ) {
-		if ( unionInstType->name == dstAsInst->name ) {
-			cost = Cost::zero;
-		}
-	}
-	*/
-}
-
 void ConversionCost_new::postvisit( const ast::EnumInstType * enumInstType ) {
 	(void)enumInstType;
Index: src/ResolvExpr/ConversionCost.h
===================================================================
--- src/ResolvExpr/ConversionCost.h	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/ResolvExpr/ConversionCost.h	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -10,5 +10,5 @@
 // Created On       : Sun May 17 09:37:28 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Tue Oct  4 14:59:00 2019
+// Last Modified On : Wed Jul 29 16:12:00 2020
 // Update Count     : 7
 //
@@ -51,6 +51,4 @@
 		void postvisit( const ReferenceType * refType );
 		void postvisit( const FunctionType * functionType );
-		void postvisit( const StructInstType * aggregateUseType );
-		void postvisit( const UnionInstType * aggregateUseType );
 		void postvisit( const EnumInstType * aggregateUseType );
 		void postvisit( const TraitInstType * aggregateUseType );
@@ -105,6 +103,4 @@
 	void postvisit( const ast::ReferenceType * refType );
 	void postvisit( const ast::FunctionType * functionType );
-	void postvisit( const ast::StructInstType * structInstType );
-	void postvisit( const ast::UnionInstType * unionInstType );
 	void postvisit( const ast::EnumInstType * enumInstType );
 	void postvisit( const ast::TraitInstType * traitInstType );
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/SynTree/Expression.h	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -206,5 +206,15 @@
   public:
 	Expression * arg;
-	bool isGenerated = true; // cast generated implicitly by code generation or explicit in program
+
+	// Inidicates cast is introduced by the CFA type system.
+	// true for casts that the resolver introduces to force a return type
+	// false for casts from user code
+	// false for casts from desugaring advanced CFA features into simpler CFA
+	// example
+	//   int * p;     // declaration
+	//   (float *) p; // use, with subject cast
+	// subject cast isGenerated means we are considering an interpretation with a type mismatch
+	// subject cast not isGenerated means someone in charge wants it that way
+	bool isGenerated = true;
 
 	CastExpr( Expression * arg, bool isGenerated = true );
Index: src/Virtual/ExpandCasts.cc
===================================================================
--- src/Virtual/ExpandCasts.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/Virtual/ExpandCasts.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jul 24 13:59:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Tus Aug  2 14:59:00 2017
-// Update Count     : 1
+// Last Modified On : Fri Jul 31 10:29:00 2020
+// Update Count     : 4
 //
 
@@ -18,10 +18,10 @@
 #include <cassert>                 // for assert, assertf
 #include <iterator>                // for back_inserter, inserter
-#include <map>                     // for map, _Rb_tree_iterator, map<>::ite...
 #include <string>                  // for string, allocator, operator==, ope...
-#include <utility>                 // for pair
 
 #include "Common/PassVisitor.h"    // for PassVisitor
+#include "Common/ScopedMap.h"      // for ScopedMap
 #include "Common/SemanticError.h"  // for SemanticError
+#include "SymTab/Mangler.h"        // for mangleType
 #include "SynTree/Declaration.h"   // for ObjectDecl, StructDecl, FunctionDecl
 #include "SynTree/Expression.h"    // for VirtualCastExpr, CastExpr, Address...
@@ -31,4 +31,38 @@
 
 namespace Virtual {
+
+	// Indented until the new ast code gets added.
+
+	/// Maps virtual table types the instance for that type.
+	class VirtualTableMap final {
+		ScopedMap<std::string, ObjectDecl *> vtable_instances;
+	public:
+		void enterScope() {
+			vtable_instances.beginScope();
+		}
+		void leaveScope() {
+			vtable_instances.endScope();
+		}
+
+		ObjectDecl * insert( ObjectDecl * vtableDecl ) {
+			std::string const & mangledName = SymTab::Mangler::mangleType( vtableDecl->type );
+			ObjectDecl *& value = vtable_instances[ mangledName ];
+			if ( value ) {
+				if ( vtableDecl->storageClasses.is_extern ) {
+					return nullptr;
+				} else if ( ! value->storageClasses.is_extern ) {
+					return value;
+				}
+			}
+			value = vtableDecl;
+			return nullptr;
+		}
+
+		ObjectDecl * lookup( const Type * vtableType ) {
+			std::string const & mangledName = SymTab::Mangler::mangleType( vtableType );
+			const auto it = vtable_instances.find( mangledName );
+			return ( vtable_instances.end() == it ) ? nullptr : it->second;
+		}
+	};
 
 	/* Currently virtual depends on the rather brittle name matching between
@@ -39,4 +73,6 @@
 	 */
 
+	namespace {
+
 	std::string get_vtable_name( std::string const & name ) {
 		return name + "_vtable";
@@ -53,8 +89,4 @@
 	std::string get_vtable_inst_name_root( std::string const & name ) {
 		return get_vtable_name_root( name.substr(1, name.size() - 10 ) );
-	}
-
-	bool is_vtable_name( std::string const & name ) {
-		return (name.substr( name.size() - 7 ) == "_vtable" );
 	}
 
@@ -64,9 +96,7 @@
 	}
 
+	} // namespace
+
 	class VirtualCastCore {
-        std::map<std::string, ObjectDecl *> vtable_instances;
-        FunctionDecl *vcast_decl;
-        StructDecl *pvt_decl;
-
 		Type * pointer_to_pvt(int level_of_indirection) {
 			Type * type = new StructInstType(
@@ -80,5 +110,5 @@
 	public:
 		VirtualCastCore() :
-			vtable_instances(), vcast_decl( nullptr ), pvt_decl( nullptr )
+			indexer(), vcast_decl( nullptr ), pvt_decl( nullptr )
 		{}
 
@@ -88,4 +118,9 @@
 
 		Expression * postmutate( VirtualCastExpr * castExpr );
+
+		VirtualTableMap indexer;
+	private:
+		FunctionDecl *vcast_decl;
+		StructDecl *pvt_decl;
 	};
 
@@ -107,44 +142,98 @@
 	void VirtualCastCore::premutate( ObjectDecl * objectDecl ) {
 		if ( is_vtable_inst_name( objectDecl->get_name() ) ) {
-			vtable_instances[objectDecl->get_name()] = objectDecl;
-		}
-	}
+			if ( ObjectDecl * existing = indexer.insert( objectDecl ) ) {
+				std::string msg = "Repeated instance of virtual table, original found at: ";
+				msg += existing->location.filename;
+				msg += ":" + toString( existing->location.first_line );
+				SemanticError( objectDecl->location, msg );
+			}
+		}
+	}
+
+	namespace {
+
+	/// Better error locations for generated casts.
+	CodeLocation castLocation( const VirtualCastExpr * castExpr ) {
+		if ( castExpr->location.isSet() ) {
+			return castExpr->location;
+		} else if ( castExpr->arg->location.isSet() ) {
+			return castExpr->arg->location;
+		} else if ( castExpr->result->location.isSet() ) {
+			return castExpr->result->location;
+		} else {
+			return CodeLocation();
+		}
+	}
+
+	[[noreturn]] void castError( const VirtualCastExpr * castExpr, std::string const & message ) {
+		SemanticError( castLocation( castExpr ), message );
+	}
+
+	/// Get the virtual table type used in a virtual cast.
+	Type * getVirtualTableType( const VirtualCastExpr * castExpr ) {
+		const Type * objectType;
+		if ( auto target = dynamic_cast<const PointerType *>( castExpr->result ) ) {
+			objectType = target->base;
+		} else if ( auto target = dynamic_cast<const ReferenceType *>( castExpr->result ) ) {
+			objectType = target->base;
+		} else {
+			castError( castExpr, "Virtual cast type must be a pointer or reference type." );
+		}
+		assert( objectType );
+
+		const StructInstType * structType = dynamic_cast<const StructInstType *>( objectType );
+		if ( nullptr == structType ) {
+			castError( castExpr, "Virtual cast type must refer to a structure type." );
+		}
+		const StructDecl * structDecl = structType->baseStruct;
+		assert( structDecl );
+
+		const ObjectDecl * fieldDecl = nullptr;
+		if ( 0 < structDecl->members.size() ) {
+			const Declaration * memberDecl = structDecl->members.front();
+			assert( memberDecl );
+			fieldDecl = dynamic_cast<const ObjectDecl *>( memberDecl );
+			if ( fieldDecl && fieldDecl->name != "virtual_table" ) {
+				fieldDecl = nullptr;
+			}
+		}
+		if ( nullptr == fieldDecl ) {
+			castError( castExpr, "Virtual cast type must have a leading virtual_table field." );
+		}
+		const PointerType * fieldType = dynamic_cast<const PointerType *>( fieldDecl->type );
+		if ( nullptr == fieldType ) {
+			castError( castExpr, "Virtual cast type virtual_table field is not a pointer." );
+		}
+		assert( fieldType->base );
+		auto virtualStructType = dynamic_cast<const StructInstType *>( fieldType->base );
+		assert( virtualStructType );
+
+		// Here is the type, but if it is polymorphic it will have lost information.
+		// (Always a clone so that it may always be deleted.)
+		StructInstType * virtualType = virtualStructType->clone();
+		if ( ! structType->parameters.empty() ) {
+			deleteAll( virtualType->parameters );
+			virtualType->parameters.clear();
+			cloneAll( structType->parameters, virtualType->parameters );
+		}
+		return virtualType;
+	}
+
+	} // namespace
 
 	Expression * VirtualCastCore::postmutate( VirtualCastExpr * castExpr ) {
-		assertf( castExpr->get_result(), "Virtual Cast target not found before expansion." );
+		assertf( castExpr->result, "Virtual Cast target not found before expansion." );
 
 		assert( vcast_decl );
 		assert( pvt_decl );
 
-		// May only cast to a pointer or reference type.
-		// A earlier validation should give a syntax error, this is
-		// just to make sure errors don't creep during translation.
-		// Move to helper with more detailed error messages.
-		PointerType * target_type =
-			dynamic_cast<PointerType *>( castExpr->get_result() );
-		assert( target_type );
-
-		StructInstType * target_struct =
-			dynamic_cast<StructInstType *>( target_type->get_base() );
-		assert( target_struct );
-
-		StructDecl * target_decl = target_struct->get_baseStruct();
-
-		std::map<std::string, ObjectDecl *>::iterator found =
-			vtable_instances.find(
-				get_vtable_inst_name( target_decl->get_name() ) );
-		if ( vtable_instances.end() == found ) {
-			assertf( false, "virtual table instance not found." );
-		}
-		ObjectDecl * table = found->second;
+		const Type * vtable_type = getVirtualTableType( castExpr );
+		ObjectDecl * table = indexer.lookup( vtable_type );
+		if ( nullptr == table ) {
+			SemanticError( castLocation( castExpr ),
+				"Could not find virtual table instance." );
+		}
 
 		Expression * result = new CastExpr(
-			//new ApplicationExpr(
-				//new AddressExpr( new VariableExpr( vcast_decl ) ),
-				//new CastExpr( new VariableExpr( vcast_decl ),
-				//	new PointerType( noQualifiers,
-				//		vcast_decl->get_type()->clone()
-				//		)
-				//	),
 			new ApplicationExpr( VariableExpr::functionPointer( vcast_decl ), {
 					new CastExpr(
@@ -163,4 +252,5 @@
 		castExpr->set_result( nullptr );
 		delete castExpr;
+		delete vtable_type;
 		return result;
 	}
Index: src/cfa.make
===================================================================
--- src/cfa.make	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ 	(revision )
@@ -1,52 +1,0 @@
-CFACOMPILE = $(CFACC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCFACOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CFACC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(AM_CFLAGS) $(CFAFLAGS) $(CFLAGS)
-
-AM_V_CFA = $(am__v_CFA_@AM_V@)
-am__v_CFA_ = $(am__v_CFA_@AM_DEFAULT_V@)
-am__v_CFA_0 = @echo "  CFA     " $@;
-am__v_CFA_1 =
-
-.cfa.o:
-	$(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-	$(am__mv) $$depbase.Tpo $$depbase.Po
-
-.cfa.lo:
-	$(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-	$(LTCFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-	$(am__mv) $$depbase.Tpo $$depbase.Plo
-
-UPPCC = u++
-UPPCOMPILE = $(UPPCC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_UPPFLAGS) $(UPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_CFLAGS) $(CFLAGS)
-
-AM_V_UPP = $(am__v_UPP_@AM_V@)
-am__v_UPP_ = $(am__v_UPP_@AM_DEFAULT_V@)
-am__v_UPP_0 = @echo "  UPP     " $@;
-am__v_UPP_1 =
-
-AM_V_GOC = $(am__v_GOC_@AM_V@)
-am__v_GOC_ = $(am__v_GOC_@AM_DEFAULT_V@)
-am__v_GOC_0 = @echo "  GOC     " $@;
-am__v_GOC_1 =
-
-AM_V_PY = $(am__v_PY_@AM_V@)
-am__v_PY_ = $(am__v_PY_@AM_DEFAULT_V@)
-am__v_PY_0 = @echo "  PYTHON  " $@;
-am__v_PY_1 =
-
-AM_V_RUST = $(am__v_RUST_@AM_V@)
-am__v_RUST_ = $(am__v_RUST_@AM_DEFAULT_V@)
-am__v_RUST_0 = @echo "  RUST    " $@;
-am__v_RUST_1 =
-
-AM_V_NODEJS = $(am__v_NODEJS_@AM_V@)
-am__v_NODEJS_ = $(am__v_NODEJS_@AM_DEFAULT_V@)
-am__v_NODEJS_0 = @echo "  NODEJS  " $@;
-am__v_NODEJS_1 =
-
-AM_V_JAVAC = $(am__v_JAVAC_@AM_V@)
-am__v_JAVAC_ = $(am__v_JAVAC_@AM_DEFAULT_V@)
-am__v_JAVAC_0 = @echo "  JAVAC   " $@;
-am__v_JAVAC_1 =
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 07d867b95a42cbafd020825e1507f8c956e32d21)
+++ src/main.cc	(revision 22f94a4397386dcee79764eace3e5c71e0455838)
@@ -9,7 +9,7 @@
 // Author           : Peter Buhr and Rob Schluntz
 // Created On       : Fri May 15 23:12:02 2015
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Feb  8 08:33:50 2020
-// Update Count     : 633
+// Last Modified By : Andrew Beach
+// Last Modified On : Tue May 19 12:03:00 2020
+// Update Count     : 634
 //
 
@@ -312,4 +312,5 @@
 		} // if
 
+		PASS( "Translate Throws", ControlStruct::translateThrows( translationUnit ) );
 		PASS( "Fix Labels", ControlStruct::fixLabels( translationUnit ) );
 		PASS( "Fix Names", CodeGen::fixNames( translationUnit ) );
@@ -360,5 +361,5 @@
 		PASS( "Expand Unique Expr", Tuples::expandUniqueExpr( translationUnit ) ); // xxx - is this the right place for this? want to expand ASAP so tha, sequent passes don't need to worry about double-visiting a unique expr - needs to go after InitTweak::fix so that copy constructed return declarations are reused
 
-		PASS( "Translate EHM" , ControlStruct::translateEHM( translationUnit ) );
+		PASS( "Translate Tries" , ControlStruct::translateTries( translationUnit ) );
 
 		PASS( "Gen Waitfor" , Concurrency::generateWaitFor( translationUnit ) );
