/* { dg-do compile } */
/* { dg-options "" } */

/* Check compatibility of array declarations.  */

/* Incomplete decl matches.  */
extern char arr0[];
char arr0[1];

/* Two integral expressions must be the same.  Note that 0 is
   a gcc extension, but it should work like any other constant.  */
extern char arr1[1];
char arr1[1];
extern char arr2[0];
char arr2[0];
extern char arr3[0];            /* { dg-error "previous declaration" } */
char arr3[1];                   /* { dg-error "conflicting types" } */

/* Variable size matches.  */
void func(int n, int m)
{
  /* The next two are from the example in c99 6.7.5.2/9.  */
  {
    /* Invalid: not compatible because 4 != 6.  */
    int a[n][6][m];
    int (*p)[4][n+1];
    p = a;			/* { dg-warning "incompatible" } */
  }
  {
    /* Compatible, but defined behavior only if n == 6 and m == n+1.  */
    int c[n][n][6][m];
    int (*r)[n][n][n+1];
    r = c;
  }
  {
    /* Compatible, but undefined behavior; (2, 2) is not a constant
       expression, and thus A is a VLA.  */
    int a[6][(2, 2)];
    int (*p)[3];
    p = a; /* { dg-bogus "incompatible" "bad vla handling" } */
  }
}
