Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 574894da3862370244ebdde2b204e3cc6a6d5c5b)
+++ src/SynTree/Expression.cc	(revision 624b722d4ef4ada94ff3db5d98fca59d7d367b74)
@@ -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 );
