Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 8c25760419860fd262fd45d0356675a44f69176b)
+++ src/Parser/ExpressionNode.cc	(revision 24d6572fc571b2a894d56a9335edd57899c448c0)
@@ -601,5 +601,6 @@
 ast::Expr * build_cast( const CodeLocation & location,
 		DeclarationNode * decl_node,
-		ExpressionNode * expr_node ) {
+		ExpressionNode * expr_node,
+		ast::CastExpr::CastKind kind ) {
 	ast::Type * targetType = maybeMoveBuildType( decl_node );
 	if ( dynamic_cast<ast::VoidType *>( targetType ) ) {
@@ -607,10 +608,10 @@
 		return new ast::CastExpr( location,
 			maybeMoveBuild( expr_node ),
-			ast::ExplicitCast );
+			ast::ExplicitCast, kind );
 	} else {
 		return new ast::CastExpr( location,
 			maybeMoveBuild( expr_node ),
 			targetType,
-			ast::ExplicitCast );
+			ast::ExplicitCast, kind );
 	} // if
 } // build_cast
Index: src/Parser/ExpressionNode.h
===================================================================
--- src/Parser/ExpressionNode.h	(revision 8c25760419860fd262fd45d0356675a44f69176b)
+++ src/Parser/ExpressionNode.h	(revision 24d6572fc571b2a894d56a9335edd57899c448c0)
@@ -69,5 +69,5 @@
 ast::DimensionExpr * build_dimensionref( const CodeLocation &, const std::string * name );
 
-ast::Expr * build_cast( const CodeLocation &, DeclarationNode * decl_node, ExpressionNode * expr_node );
+ast::Expr * build_cast( const CodeLocation &, DeclarationNode * decl_node, ExpressionNode * expr_node, ast::CastExpr::CastKind kind = ast::CastExpr::Default );
 ast::Expr * build_keyword_cast( const CodeLocation &, ast::AggregateDecl::Aggregate target, ExpressionNode * expr_node );
 ast::Expr * build_virtual_cast( const CodeLocation &, DeclarationNode * decl_node, ExpressionNode * expr_node );
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 8c25760419860fd262fd45d0356675a44f69176b)
+++ src/Parser/parser.yy	(revision 24d6572fc571b2a894d56a9335edd57899c448c0)
@@ -931,5 +931,5 @@
 		{ $$ = new ExpressionNode( new ast::VirtualCastExpr( yylloc, maybeMoveBuild( $5 ), maybeMoveBuildType( $3 ) ) ); }
 	| '(' RETURN type_no_function ')' cast_expression	// CFA
-		{ SemanticError( yylloc, "Return cast is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new ExpressionNode( build_cast( yylloc, $3, $5, ast::CastExpr::Return ) ); }
 	| '(' COERCE type_no_function ')' cast_expression	// CFA
 		{ SemanticError( yylloc, "Coerce cast is currently unimplemented." ); $$ = nullptr; }
