Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision ee3c93d9425378dba13f5e7407f9097ac9d1cbb8)
+++ src/SynTree/Expression.cc	(revision 61d9b4b1665e2ecc616141fbd84baeba38a14dcb)
@@ -746,4 +746,19 @@
 	os << std::endl << indent+1 << "... deleted by: ";
 	deleteStmt->print( os, indent+1 );
+}
+
+
+DefaultArgExpr::DefaultArgExpr( Expression * expr ) : expr( expr ) {
+	assert( expr->result );
+	result = expr->result->clone();
+}
+DefaultArgExpr::DefaultArgExpr( const DefaultArgExpr & other ) : Expression( other ), expr( maybeClone( other.expr ) ) {}
+DefaultArgExpr::~DefaultArgExpr() {
+	delete expr;
+}
+
+void DefaultArgExpr::print( std::ostream & os, Indenter indent ) const {
+	os << "Default Argument Expression" << std::endl << indent+1;
+	expr->print( os, indent+1 );
 }
 
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision ee3c93d9425378dba13f5e7407f9097ac9d1cbb8)
+++ src/SynTree/Expression.h	(revision 61d9b4b1665e2ecc616141fbd84baeba38a14dcb)
@@ -865,4 +865,19 @@
 };
 
+/// expression wrapping the use of a default argument - should never make it past the resolver.
+class DefaultArgExpr : public Expression {
+public:
+	Expression * expr;
+
+	DefaultArgExpr( Expression * expr );
+	DefaultArgExpr( const DefaultArgExpr & other );
+	~DefaultArgExpr();
+
+	virtual DefaultArgExpr * clone() const { return new DefaultArgExpr( * this ); }
+	virtual void accept( Visitor & v ) { v.visit( this ); }
+	virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const;
+};
+
 /// C11 _Generic expression
 class GenericExpr : public Expression {
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision ee3c93d9425378dba13f5e7407f9097ac9d1cbb8)
+++ src/SynTree/Mutator.h	(revision 61d9b4b1665e2ecc616141fbd84baeba38a14dcb)
@@ -93,4 +93,5 @@
 	virtual Expression * mutate( InitExpr  * initExpr ) = 0;
 	virtual Expression * mutate( DeletedExpr * delExpr ) = 0;
+	virtual Expression * mutate( DefaultArgExpr * argExpr ) = 0;
 	virtual Expression * mutate( GenericExpr * genExpr ) = 0;
 
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision ee3c93d9425378dba13f5e7407f9097ac9d1cbb8)
+++ src/SynTree/SynTree.h	(revision 61d9b4b1665e2ecc616141fbd84baeba38a14dcb)
@@ -101,4 +101,5 @@
 class InitExpr;
 class DeletedExpr;
+class DefaultArgExpr;
 class GenericExpr;
 
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision ee3c93d9425378dba13f5e7407f9097ac9d1cbb8)
+++ src/SynTree/Visitor.h	(revision 61d9b4b1665e2ecc616141fbd84baeba38a14dcb)
@@ -95,4 +95,5 @@
 	virtual void visit( InitExpr *  initExpr ) = 0;
 	virtual void visit( DeletedExpr * delExpr ) = 0;
+	virtual void visit( DefaultArgExpr * argExpr ) = 0;
 	virtual void visit( GenericExpr * genExpr ) = 0;
 
