Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision e1d66c84e0c0d91acc25559fd73ab14706eee525)
+++ src/Parser/ExpressionNode.cc	(revision 46da46b804c2acd6916c888202a57186f41df8a8)
@@ -544,11 +544,11 @@
 }; // OperName
 
-Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node ) {
+Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node, CastExpr::CastKind kind ) {
 	Type * targetType = maybeMoveBuildType( decl_node );
 	if ( dynamic_cast< VoidType * >( targetType ) ) {
 		delete targetType;
-		return new CastExpr( maybeMoveBuild< Expression >(expr_node), false );
+		return new CastExpr( maybeMoveBuild< Expression >(expr_node), false, kind );
 	} else {
-		return new CastExpr( maybeMoveBuild< Expression >(expr_node), targetType, false );
+		return new CastExpr( maybeMoveBuild< Expression >(expr_node), targetType, false, kind );
 	} // if
 } // build_cast
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision e1d66c84e0c0d91acc25559fd73ab14706eee525)
+++ src/Parser/ParseNode.h	(revision 46da46b804c2acd6916c888202a57186f41df8a8)
@@ -189,5 +189,5 @@
 DimensionExpr * build_dimensionref( const std::string * name );
 
-Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node );
+Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node, CastExpr::CastKind kind = CastExpr::Default );
 Expression * build_keyword_cast( AggregateDecl::Aggregate target, ExpressionNode * expr_node );
 Expression * build_virtual_cast( DeclarationNode * decl_node, ExpressionNode * expr_node );
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision e1d66c84e0c0d91acc25559fd73ab14706eee525)
+++ src/Parser/parser.yy	(revision 46da46b804c2acd6916c888202a57186f41df8a8)
@@ -905,5 +905,5 @@
 		{ $$ = new ExpressionNode( new VirtualCastExpr( maybeMoveBuild<Expression>( $5 ), maybeMoveBuildType( $3 ) ) ); }
 	| '(' RETURN type_no_function ')' cast_expression	// CFA
-		{ SemanticError( yylloc, "Return cast is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new ExpressionNode( build_cast( $3, $5, CastExpr::Return ) ); }
 	| '(' COERCE type_no_function ')' cast_expression	// CFA
 		{ SemanticError( yylloc, "Coerce cast is currently unimplemented." ); $$ = nullptr; }
