diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c
index d0ac448732e6d71ae384519f57ba28caffbadbda..e1e861997221a776607f58f14f72fa106830731b 100644
--- a/src/backend/parser/parse_expr.c
+++ b/src/backend/parser/parse_expr.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.71 2000/02/26 21:11:10 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.72 2000/03/07 23:30:53 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -78,19 +78,21 @@ transformExpr(ParseState *pstate, Node *expr, int precedence)
 				ParamNo    *pno = (ParamNo *) expr;
 				int			paramno = pno->number;
 				Oid			toid = param_type(paramno);
-				Param	   *param;
+				Param	   *param = makeNode(Param);
 
 				if (!OidIsValid(toid))
 					elog(ERROR, "Parameter '$%d' is out of range", paramno);
-				param = makeNode(Param);
 				param->paramkind = PARAM_NUM;
 				param->paramid = (AttrNumber) paramno;
 				param->paramname = "<unnamed>";
-				param->paramtype = (Oid) toid;
-				param->param_tlist = (List *) NULL;
+				param->paramtype = toid;
+				param->param_tlist = NIL;
 				result = transformIndirection(pstate, (Node *) param,
 											  pno->indirection);
-				/* XXX what about cast (typename) applied to Param ??? */
+				/* cope with typecast applied to param */
+				if (pno->typename != NULL)
+					result = parser_typecast_expression(pstate, result,
+														pno->typename);
 				break;
 			}
 		case T_TypeCast:
@@ -732,6 +734,7 @@ exprTypmod(Node *expr)
  * We assume that a two-argument function named for a datatype, whose
  * output and first argument types are that datatype, and whose second
  * input is an int32 constant, represents a forced length coercion.
+ *
  * XXX It'd be better if the parsetree retained some explicit indication
  * of the coercion, so we didn't need these heuristics.
  */