Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.dg/c11-typedef-1.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* 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" } */ }