OSDN Git Service

* gcc.dg/march.c: Ignore a note for some targets.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / c1x-typedef-1.c
1 /* Test typedef redeclaration in C1X.  */
2 /* { dg-do compile } */
3 /* { dg-options "-std=c1x -pedantic-errors" } */
4
5 /* C1X permits typedefs to be redeclared to the same type, but not to
6    different-but-compatible types, and not when the type is variably
7    modified.  */
8
9 #include <limits.h>
10
11 typedef int TI;
12 typedef int TI2;
13 typedef TI2 TI;
14 typedef TI TI2;
15
16 enum e { E1 = 0, E2 = INT_MAX, E3 = -1 };
17 typedef enum e TE;
18 typedef enum e TE; /* { dg-message "previous declaration" } */
19 typedef int TE; /* { dg-error "with different type" } */
20
21 struct s;
22 typedef struct s TS;
23 struct s { int i; };
24 typedef struct s TS;
25
26 typedef int IA[];
27 typedef TI2 IA[]; /* { dg-message "previous declaration" } */
28 typedef int A2[2];
29 typedef TI A2[2]; /* { dg-message "previous declaration" } */
30 typedef IA A2; /* { dg-error "with different type" } */
31 typedef int A3[3];
32 typedef A3 IA; /* { dg-error "with different type" } */
33
34 typedef void F(int);
35 typedef void F(TI); /* { dg-message "previous declaration" } */
36 typedef void F(enum e); /* { dg-error "with different type" } */
37
38 typedef int G(void);
39 typedef TI G(void); /* { dg-message "previous declaration" } */
40 typedef enum e G(void); /* { dg-error "with different type" } */
41
42 typedef int *P;
43 typedef TI *P; /* { dg-message "previous declaration" } */
44 typedef enum e *P; /* { dg-error "with different type" } */
45
46 typedef void F2();
47 typedef void F2(); /* { dg-message "previous declaration" } */
48 typedef void F2(int); /* { dg-error "with different type" } */
49
50 void
51 f (void)
52 {
53   int a = 1;
54   int b = 2;
55   typedef void FN(int (*p)[a]);
56   typedef void FN(int (*p)[b]);
57   typedef void FN(int (*p)[*]); /* { dg-message "previous declaration" } */
58   typedef void FN(int (*p)[1]); /* { dg-error "with different type" } */
59   typedef void FN2(int (*p)[a]);
60   typedef void FN2(int (*p)[b]);
61   typedef void FN2(int (*p)[*]); /* { dg-message "previous declaration" } */
62   typedef void FN2(int (*p)[]); /* { dg-error "with different type" } */
63   typedef int AV[a]; /* { dg-message "previous declaration" } */
64   typedef int AV[b-1]; /* { dg-error "redefinition" } */
65   typedef int AAa[a]; /* { dg-message "previous declaration" } */
66   typedef int AAb[b-1];
67   typedef AAa *VF(void); /* { dg-message "previous declaration" } */
68   typedef AAb *VF(void); /* { dg-error "redefinition" } */
69   typedef AAa AAa; /* { dg-error "redefinition" } */
70 }