Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision c5708066100c6beeef453c6d3f97c1d266f2cd50)
+++ src/AST/Expr.hpp	(revision 4e13e2a4b77e6e3f69e8afbd343b850876c48b21)
@@ -541,5 +541,7 @@
 
 	CommaExpr( const CodeLocation & loc, const Expr * a1, const Expr * a2 )
-	: Expr( loc ), arg1( a1 ), arg2( a2 ) {}
+	: Expr( loc ), arg1( a1 ), arg2( a2 ) {
+		this->result = a2->result;
+	}
 
 	const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
Index: src/AST/ForallSubstitutionTable.cpp
===================================================================
--- src/AST/ForallSubstitutionTable.cpp	(revision c5708066100c6beeef453c6d3f97c1d266f2cd50)
+++ src/AST/ForallSubstitutionTable.cpp	(revision 4e13e2a4b77e6e3f69e8afbd343b850876c48b21)
@@ -19,4 +19,5 @@
 #include <vector>
 
+#include "Copy.hpp"                // for shallowCopy
 #include "Decl.hpp"
 #include "Node.hpp"
@@ -26,6 +27,6 @@
 namespace ast {
 
-std::vector< ptr< TypeDecl > > ForallSubstitutionTable::clone( 
-	const std::vector< ptr< TypeDecl > > & forall, Visitor & v 
+std::vector< ptr< TypeDecl > > ForallSubstitutionTable::clone(
+	const std::vector< ptr< TypeDecl > > & forall, Visitor & v
 ) {
 	std::vector< ptr< TypeDecl > > new_forall;
@@ -34,6 +35,5 @@
 	for ( const ast::TypeDecl * d : forall ) {
 		// create cloned type decl and insert into substitution map before further mutation
-		auto new_d = new ast::TypeDecl{
-			d->location, d->name, d->storage, d->base, d->kind, d->sized, d->init };
+		auto new_d = shallowCopy( d );
 		decls.insert( d, new_d );
 		// perform other mutations and add to output
