Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 7ff3e5224d41942a97b813aec3db3d1126db4898)
+++ src/AST/Convert.cpp	(revision ef9988b2a61622a9298917f718714c142ebfa9a8)
@@ -167,5 +167,5 @@
 			LinkageSpec::Spec( node->linkage.val ),
 			bfwd,
-			type,
+			type->clone(),
 			init,
 			attr,
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision 7ff3e5224d41942a97b813aec3db3d1126db4898)
+++ src/AST/Print.cpp	(revision ef9988b2a61622a9298917f718714c142ebfa9a8)
@@ -237,4 +237,12 @@
 	void postprint( const ast::Expr * node ) {
 		print( node->inferred );
+
+		if ( node->result ) {
+			os << endl << indent << "... with resolved type:" << endl;
+			++indent;
+			os << indent;
+			node->result->accept( *this );
+			--indent;
+		}
 
 		if ( node->env ) {
Index: src/AST/TypeSubstitution.hpp
===================================================================
--- src/AST/TypeSubstitution.hpp	(revision 7ff3e5224d41942a97b813aec3db3d1126db4898)
+++ src/AST/TypeSubstitution.hpp	(revision ef9988b2a61622a9298917f718714c142ebfa9a8)
@@ -195,5 +195,5 @@
 	assert( input );
 	Pass<Substituter> sub( *this, true );
-	input = strict_dynamic_cast< const SynTreeClass * >( input->accept( sub ) );
+	input = strict_dynamic_cast< const SynTreeClass * >( deepCopy(input)->accept( sub ) );
 	return { input, sub.core.subCount };
 }
