Index: src/SynTree/CompoundStmt.cc
===================================================================
--- src/SynTree/CompoundStmt.cc	(revision 2c57025b9dec0a2c5dae7c32ad6e1ac3ccf8f76e)
+++ src/SynTree/CompoundStmt.cc	(revision fc638d2176b72a88b406e73af7f7f9e548ae05f7)
@@ -49,13 +49,11 @@
 		Statement * origStmt = *origit++;
 		if ( DeclStmt * declStmt = dynamic_cast< DeclStmt * >( s ) ) {
-			DeclStmt * origDeclStmt = dynamic_cast< DeclStmt * >( origStmt );
-			assert( origDeclStmt );
+			DeclStmt * origDeclStmt = safe_dynamic_cast< DeclStmt * >( origStmt );
 			if ( DeclarationWithType * dwt = dynamic_cast< DeclarationWithType * > ( declStmt->get_decl() ) ) {
-				DeclarationWithType * origdwt = dynamic_cast< DeclarationWithType * > ( origDeclStmt->get_decl() );
-				assert( origdwt );
+				DeclarationWithType * origdwt = safe_dynamic_cast< DeclarationWithType * > ( origDeclStmt->get_decl() );
 				assert( dwt->get_name() == origdwt->get_name() );
 				declMap[ origdwt ] = dwt;
-			}
-		}
+			} else assert( ! dynamic_cast< DeclarationWithType * > ( origDeclStmt->get_decl() ) );
+		} else assert( ! dynamic_cast< DeclStmt * > ( s ) );
 	}
 	if ( ! declMap.empty() ) {
Index: src/SynTree/Initializer.cc
===================================================================
--- src/SynTree/Initializer.cc	(revision 2c57025b9dec0a2c5dae7c32ad6e1ac3ccf8f76e)
+++ src/SynTree/Initializer.cc	(revision fc638d2176b72a88b406e73af7f7f9e548ae05f7)
@@ -65,4 +65,10 @@
 }
 
+ListInit::ListInit( const ListInit & other ) : Initializer( other ) {
+	cloneAll( other.initializers, initializers );
+	cloneAll( other.designators, designators );
+}
+
+
 ListInit::~ListInit() {
 	deleteAll( initializers );
Index: src/SynTree/Initializer.h
===================================================================
--- src/SynTree/Initializer.h	(revision 2c57025b9dec0a2c5dae7c32ad6e1ac3ccf8f76e)
+++ src/SynTree/Initializer.h	(revision fc638d2176b72a88b406e73af7f7f9e548ae05f7)
@@ -88,4 +88,5 @@
 	ListInit( const std::list<Initializer*> &initializers,
 			  const std::list<Expression *> &designators = std::list< Expression * >(), bool maybeConstructed = false );
+	ListInit( const ListInit & other );
 	virtual ~ListInit();
 
Index: src/SynTree/VarExprReplacer.cc
===================================================================
--- src/SynTree/VarExprReplacer.cc	(revision 2c57025b9dec0a2c5dae7c32ad6e1ac3ccf8f76e)
+++ src/SynTree/VarExprReplacer.cc	(revision fc638d2176b72a88b406e73af7f7f9e548ae05f7)
@@ -21,4 +21,5 @@
 // replace variable with new node from decl map
 void VarExprReplacer::visit( VariableExpr * varExpr ) {
+  // xxx - assertions and parameters aren't accounted for in this... (i.e. they aren't inserted into the map when it's made, only DeclStmts are)
   if ( declMap.count( varExpr->get_var() ) ) {
     varExpr->set_var( declMap.at( varExpr->get_var() ) );
