Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision a9fc180fb0f333027273fa4a12cf9efe6943f5f5)
+++ src/GenPoly/Box.cc	(revision 064cb183b9208c8bfca799c4a606ff5dc1b1aa8d)
@@ -1307,4 +1307,11 @@
 				}
 			}
+			// errors should have been caught by this point, remove initializers from parameters to allow correct codegen of default arguments
+			for ( Declaration * param : functionDecl->get_functionType()->get_parameters() ) {
+				if ( ObjectDecl * obj = dynamic_cast< ObjectDecl * >( param ) ) {
+					delete obj->get_init();
+					obj->set_init( nullptr );
+				}
+			}
 			return functionDecl;
 		}
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision a9fc180fb0f333027273fa4a12cf9efe6943f5f5)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 064cb183b9208c8bfca799c4a606ff5dc1b1aa8d)
@@ -403,14 +403,15 @@
 			// End of actuals - Handle default values
 			if ( SingleInit *si = dynamic_cast<SingleInit *>( defaultValue )) {
-				// so far, only constant expressions are accepted as default values
-				if ( ConstantExpr *cnstexpr = dynamic_cast<ConstantExpr *>( si->get_value()) ) {
-					if ( Constant *cnst = dynamic_cast<Constant *>( cnstexpr->get_constant() ) ) {
-						if ( unify( formalType, cnst->get_type(), resultEnv, resultNeed, resultHave, openVars, indexer ) ) {
-							// xxx - Don't know if this is right
-							*out++ = cnstexpr->clone();
-							return true;
+				if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( si->get_value() ) ) {
+					// so far, only constant expressions are accepted as default values
+					if ( ConstantExpr *cnstexpr = dynamic_cast<ConstantExpr *>( castExpr->get_arg() ) ) {
+						if ( Constant *cnst = dynamic_cast<Constant *>( cnstexpr->get_constant() ) ) {
+							if ( unify( formalType, cnst->get_type(), resultEnv, resultNeed, resultHave, openVars, indexer ) ) {
+								*out++ = cnstexpr->clone();
+								return true;
+							} // if
 						} // if
 					} // if
-				} // if
+				}
 			} // if
 			return false;
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision a9fc180fb0f333027273fa4a12cf9efe6943f5f5)
+++ src/SymTab/Mangler.cc	(revision 064cb183b9208c8bfca799c4a606ff5dc1b1aa8d)
@@ -172,5 +172,5 @@
 			for ( std::list< Expression* >::const_iterator param = params.begin(); param != params.end(); ++param ) {
 				TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
-				assert(paramType && "Aggregate parameters should be type expressions");
+				assertf(paramType, "Aggregate parameters should be type expressions: %s", toString(*param).c_str());
 				maybeAccept( paramType->get_type(), *this );
 			}
