diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
new file mode 100644
index 311d0c2..0b05158
*** a/src/backend/utils/adt/arrayfuncs.c
--- b/src/backend/utils/adt/arrayfuncs.c
*************** ArrayCount(const char *str, int *dim, ch
*** 426,432 ****
  	for (i = 0; i < MAXDIM; ++i)
  	{
  		temp[i] = dim[i] = 0;
! 		nelems_last[i] = nelems[i] = 1;
  	}
  
  	ptr = str;
--- 426,433 ----
  	for (i = 0; i < MAXDIM; ++i)
  	{
  		temp[i] = dim[i] = 0;
! 		nelems[i] = 1;
! 		nelems_last[i] = -1;
  	}
  
  	ptr = str;
*************** ArrayCount(const char *str, int *dim, ch
*** 540,547 ****
  							errmsg("malformed array literal: \"%s\"", str)));
  						nest_level--;
  
! 						if ((nelems_last[nest_level] != 1) &&
! 							(nelems[nest_level] != nelems_last[nest_level]))
  							ereport(ERROR,
  							   (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
  								errmsg("multidimensional arrays must have "
--- 541,548 ----
  							errmsg("malformed array literal: \"%s\"", str)));
  						nest_level--;
  
! 						if (nelems_last[nest_level] != -1 &&
! 							nelems[nest_level] != nelems_last[nest_level])
  							ereport(ERROR,
  							   (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
  								errmsg("multidimensional arrays must have "
diff --git a/src/test/regress/expected/arrays.out b/src/test/regress/expected/arrays.out
new file mode 100644
index e1b9d7f..6dce5c9
*** a/src/test/regress/expected/arrays.out
--- b/src/test/regress/expected/arrays.out
*************** select cardinality('{{1,2},{3,4},{5,6}}'
*** 1491,1497 ****
             6
  (1 row)
  
! select cardinality('{{{1}},{{2,3},{3,4}}}'::int[]);
   cardinality 
  -------------
             8
--- 1491,1497 ----
             6
  (1 row)
  
! select cardinality('{{{1,9},{5,6}},{{2,3},{3,4}}}'::int[]);
   cardinality 
  -------------
             8
diff --git a/src/test/regress/sql/arrays.sql b/src/test/regress/sql/arrays.sql
new file mode 100644
index 64630d9..92af172
*** a/src/test/regress/sql/arrays.sql
--- b/src/test/regress/sql/arrays.sql
*************** select cardinality(array[1,2,3]);
*** 425,431 ****
  select cardinality('[2:4]={5,6,7}'::int[]);
  select cardinality('{{1,2}}'::int[]);
  select cardinality('{{1,2},{3,4},{5,6}}'::int[]);
! select cardinality('{{{1}},{{2,3},{3,4}}}'::int[]);
  
  select array_agg(unique1) from (select unique1 from tenk1 where unique1 < 15 order by unique1) ss;
  select array_agg(ten) from (select ten from tenk1 where unique1 < 15 order by unique1) ss;
--- 425,431 ----
  select cardinality('[2:4]={5,6,7}'::int[]);
  select cardinality('{{1,2}}'::int[]);
  select cardinality('{{1,2},{3,4},{5,6}}'::int[]);
! select cardinality('{{{1,9},{5,6}},{{2,3},{3,4}}}'::int[]);
  
  select array_agg(unique1) from (select unique1 from tenk1 where unique1 < 15 order by unique1) ss;
  select array_agg(ten) from (select ten from tenk1 where unique1 < 15 order by unique1) ss;
