diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index 5a6540b88ea154a78fcdf3b56f24bc73e25c70eb..444ee7a2007d9a6cdbf714470bbf71651647d758 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.289 2008/12/18 18:20:34 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.290 2008/12/19 05:04:35 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -4451,6 +4451,14 @@ get_rule_expr(Node *node, deparse_context *context,
 				appendStringInfo(buf, "ARRAY[");
 				get_rule_expr((Node *) arrayexpr->elements, context, true);
 				appendStringInfoChar(buf, ']');
+				/*
+				 * If the array isn't empty, we assume its elements are
+				 * coerced to the desired type.  If it's empty, though, we
+				 * need an explicit coercion to the array type.
+				 */
+				if (arrayexpr->elements == NIL)
+					appendStringInfo(buf, "::%s",
+						format_type_with_typemod(arrayexpr->array_typeid, -1));
 			}
 			break;
 
diff --git a/src/test/regress/expected/polymorphism.out b/src/test/regress/expected/polymorphism.out
index 6fafc0343cc2cb32a1f916b1d511bf4cae10d773..aace99cb62554bee87ccecc95c414974c0c32749 100644
--- a/src/test/regress/expected/polymorphism.out
+++ b/src/test/regress/expected/polymorphism.out
@@ -1005,10 +1005,10 @@ $$ select array_upper($1, 1) $$ language sql;
 ERROR:  cannot remove parameter defaults from existing function
 HINT:  Use DROP FUNCTION first.
 \df dfunc
-                            List of functions
- Schema | Name  | Result data type |         Argument data types          
---------+-------+------------------+--------------------------------------
- public | dfunc | integer          | VARIADIC a integer[] DEFAULT ARRAY[]
+                                  List of functions
+ Schema | Name  | Result data type |               Argument data types               
+--------+-------+------------------+-------------------------------------------------
+ public | dfunc | integer          | VARIADIC a integer[] DEFAULT ARRAY[]::integer[]
 (1 row)
 
 drop function dfunc(a variadic int[]);