Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision 18ca28e698989f58b5b3b02c373ad9977156462e)
+++ src/SymTab/Autogen.cc	(revision f23297749a9c5994cc01da9cf150c132ee015f82)
@@ -295,4 +295,12 @@
 		for ( FunctionDecl * dcl : newFuncs ) {
 			genFuncBody( dcl );
+			if ( CodeGen::isAssignment( dcl->name ) ) {
+				// assignment needs to return a value
+				FunctionType * assignType = dcl->type;
+				assert( assignType->parameters.size() == 2 );
+				assert( assignType->returnVals.size() == 1 );
+				ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( assignType->parameters.front() );
+				dcl->statements->push_back( new ReturnStmt( noLabels, new VariableExpr( dstParam ) ) );
+			}
 			resolve( dcl );
 		}
@@ -349,15 +357,4 @@
 		} else {
 			makeFunctionBody( aggregateDecl->members.rbegin(), aggregateDecl->members.rend(), dcl, false );
-		}
-		if ( CodeGen::isAssignment( dcl->name ) ) {
-			// assignment needs to return a value
-			FunctionType * assignType = dcl->type;
-			assert( assignType->parameters.size() == 2 );
-			assert( assignType->returnVals.size() == 1 );
-			ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( assignType->parameters.back() );
-			ObjectDecl * retParam = strict_dynamic_cast< ObjectDecl * >( assignType->returnVals.front() );
-
-			dcl->statements->push_back( new ExprStmt( noLabels, new UntypedExpr( new NameExpr("?{}"), { new VariableExpr( retParam ), new VariableExpr( srcParam ) } ) ) );
-			dcl->statements->push_back( new ReturnStmt( noLabels, new VariableExpr( retParam ) ) );
 		}
 	}
@@ -483,10 +480,5 @@
 			ObjectDecl * dstParam = strict_dynamic_cast< ObjectDecl * >( ftype->parameters.front() );
 			ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( ftype->parameters.back() );
-
 			makeMemberOp( srcParam, dstParam, back_inserter( funcDecl->statements->kids ) );
-			if ( CodeGen::isAssignment( funcDecl->name ) ) {
-				// also generate return statement in assignment
-				funcDecl->statements->push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
-			}
 		} else {
 			// default ctor/dtor body is empty - add unused attribute to parameter to silence warnings
@@ -551,8 +543,4 @@
 			callExpr->get_args().push_back( new VariableExpr( srcParam ) );
 			funcDecl->statements->push_back( new ExprStmt( noLabels, callExpr ) );
-			if ( CodeGen::isAssignment( funcDecl->name ) ) {
-				// also generate return statement in assignment
-				funcDecl->statements->push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
-			}
 		} else {
 			// default ctor/dtor body is empty - add unused attribute to parameter to silence warnings
@@ -580,11 +568,4 @@
 		if ( src ) expr->args.push_back( new CastExpr( new VariableExpr( src ), typeDecl->base->clone() ) );
 		dcl->statements->kids.push_back( new ExprStmt( noLabels, expr ) );
-		if ( CodeGen::isAssignment( dcl->get_name() ) ) {
-			// assignment needs to return a value
-			FunctionType * assignType = dcl->type;
-			assert( assignType->parameters.size() == 2 );
-			ObjectDecl * srcParam = strict_dynamic_cast< ObjectDecl * >( assignType->parameters.back() );
-			dcl->statements->kids.push_back( new ReturnStmt( noLabels, new VariableExpr( srcParam ) ) );
-		}
 	};
 
