Index: src/Tuples/TupleAssignment.cc
===================================================================
--- src/Tuples/TupleAssignment.cc	(revision c470ada0207d9011922938be7cbc87f706da5ed5)
+++ src/Tuples/TupleAssignment.cc	(revision 7641b6c36b40524a09d0d16b7c7db8adccd57ced)
@@ -272,5 +272,11 @@
 		// args.push_back( new AddressExpr( new VariableExpr( left ) ) );
 		if ( right ) args.push_back( new VariableExpr( right ) );
-		return new UntypedExpr( new NameExpr( fname ), args );
+		if ( left->type->referenceDepth() > 1 && CodeGen::isConstructor( fname ) ) {
+			args.front() = new AddressExpr( args.front() );
+			if ( right ) args.back() = new AddressExpr( args.back() );
+			return new UntypedExpr( new NameExpr( "?=?" ), args );
+		} else {
+			return new UntypedExpr( new NameExpr( fname ), args );
+		}
 	}
 
@@ -291,5 +297,5 @@
 		if ( ! dynamic_cast< ReferenceType * >( expr->get_result() ) ) {
 			ConstructorInit * ctorInit = InitTweak::genCtorInit( ret );
-			ret->set_init( ctorInit );
+			ret->init = ctorInit;
 			ResolvExpr::resolveCtorInit( ctorInit, spotter.currentFinder.get_indexer() ); // resolve ctor/dtors for the new object
 			PassVisitor<EnvRemover> rm; // remove environments from subexpressions of StmtExprs
