/* Test typedef redeclaration in C11.  */
/* { dg-do compile } */
/* { dg-options "-std=c11 -pedantic-errors" } */

/* C11 permits typedefs to be redeclared to the same type, but not to
   different-but-compatible types, and not when the type is variably
   modified.  */

#include <limits.h>

typedef int TI;
typedef int TI2;
typedef TI2 TI;
typedef TI TI2;

enum e { E1 = 0, E2 = INT_MAX, E3 = -1 };
typedef enum e TE;
typedef enum e TE; /* { dg-message "previous declaration" } */
typedef int TE; /* { dg-error "with different type" } */

struct s;
typedef struct s TS;
struct s { int i; };
typedef struct s TS;

typedef int IA[];
typedef TI2 IA[]; /* { dg-message "previous declaration" } */
typedef int A2[2];
typedef TI A2[2]; /* { dg-message "previous declaration" } */
typedef IA A2; /* { dg-error "with different type" } */
typedef int A3[3];
typedef A3 IA; /* { dg-error "with different type" } */

typedef void F(int);
typedef void F(TI); /* { dg-message "previous declaration" } */
typedef void F(enum e); /* { dg-error "with different type" } */

typedef int G(void);
typedef TI G(void); /* { dg-message "previous declaration" } */
typedef enum e G(void); /* { dg-error "with different type" } */

typedef int *P;
typedef TI *P; /* { dg-message "previous declaration" } */
typedef enum e *P; /* { dg-error "with different type" } */

typedef void F2();
typedef void F2(); /* { dg-message "previous declaration" } */
typedef void F2(int); /* { dg-error "with different type" } */

void
f (void)
{
  int a = 1;
  int b = 2;
  typedef void FN(int (*p)[a]);
  typedef void FN(int (*p)[b]);
  typedef void FN(int (*p)[*]); /* { dg-message "previous declaration" } */
  typedef void FN(int (*p)[1]); /* { dg-error "with different type" } */
  typedef void FN2(int (*p)[a]);
  typedef void FN2(int (*p)[b]);
  typedef void FN2(int (*p)[*]); /* { dg-message "previous declaration" } */
  typedef void FN2(int (*p)[]); /* { dg-error "with different type" } */
  typedef int AV[a]; /* { dg-message "previous declaration" } */
  typedef int AV[b-1]; /* { dg-error "redefinition" } */
  typedef int AAa[a]; /* { dg-message "previous declaration" } */
  typedef int AAb[b-1];
  typedef AAa *VF(void); /* { dg-message "previous declaration" } */
  typedef AAb *VF(void); /* { dg-error "redefinition" } */
  typedef AAa AAa; /* { dg-error "redefinition" } */
}
