Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision e2e7330de2695ce8f95408c682ce20f6f31239db)
+++ src/SynTree/Expression.cc	(revision 09928490678e146befd5d185f92f38d99e9431b3)
@@ -613,5 +613,10 @@
 	delete result;
 	result = nullptr;
-	if ( ! body.empty() ) {
+	if ( ! returnDecls.empty() ) {
+		// prioritize return decl for result type, since if a return decl exists, then
+		// the StmtExpr is currently in an intermediate state where the body will always
+		// give a void result type.
+		result = returnDecls.front()->get_type()->clone();
+	} else if ( ! body.empty() ) {
 		if ( ExprStmt * exprStmt = dynamic_cast< ExprStmt * >( body.back() ) ) {
 			result = maybeClone( exprStmt->expr->result );
