1 /* Test GNU extensions __typeof__ and __typeof_unqual__. Valid code. */
3 /* { dg-options "-std=c11 -pedantic-errors" } */
6 extern __typeof__ (i
) i
;
7 extern __typeof (int) i
;
8 extern __typeof_unqual__ (i
) i
;
9 extern __typeof_unqual (int) i
;
12 extern __typeof__ (volatile int) vi
;
13 extern __typeof (vi
) vi
;
15 extern __typeof_unqual__ (volatile int) i
;
16 extern __typeof_unqual__ (vi
) i
;
17 extern __typeof__ ((const int) vi
) i
;
18 extern __typeof ((volatile int) vi
) i
;
21 extern __typeof (const int) ci
;
22 extern __typeof (ci
) ci
;
24 extern __typeof_unqual (const int) i
;
25 extern __typeof_unqual (ci
) i
;
26 extern __typeof__ ((const int) ci
) i
;
27 extern __typeof__ (+ci
) i
;
28 extern __typeof (0, ci
) i
;
29 extern __typeof__ (1 ? ci
: ci
) i
;
30 extern __typeof (0) i
;
33 extern __typeof__ (fci ()) i
;
36 extern __typeof (_Atomic
int) ai
;
37 extern __typeof__ (_Atomic (int)) ai
;
38 extern __typeof (ai
) ai
;
40 extern __typeof_unqual__ (_Atomic
int) i
;
41 extern __typeof_unqual (_Atomic (int)) i
;
42 extern __typeof_unqual__ (ai
) i
;
43 extern __typeof (+ai
) i
;
44 extern __typeof__ ((_Atomic
int) ai
) i
;
45 extern __typeof__ (0, ai
) i
;
46 extern __typeof (1 ? ai
: ai
) i
;
48 _Atomic
int fai (void);
49 extern __typeof__ (fai ()) i
;
51 _Atomic
const volatile int acvi
;
52 extern __typeof (int volatile const _Atomic
) acvi
;
53 extern __typeof (acvi
) acvi
;
54 extern const _Atomic
volatile __typeof (acvi
) acvi
;
55 extern _Atomic
volatile __typeof__ (ci
) acvi
;
56 extern _Atomic
const __typeof (vi
) acvi
;
57 extern const __typeof__ (ai
) volatile acvi
;
59 extern __typeof_unqual (acvi
) i
;
60 extern __typeof_unqual__ (__typeof (acvi
)) i
;
61 extern __typeof_unqual (_Atomic
__typeof_unqual__ (acvi
)) i
;
63 extern _Atomic
__typeof_unqual (acvi
) ai
;
68 volatile char *const cpvc
;
70 const char *volatile vpcc
;
73 extern __typeof__ (*cpvc
) vc
;
74 extern __typeof_unqual (*cpvc
) c
;
75 extern __typeof_unqual__ (cpvc
) pvc
;
76 extern __typeof_unqual__ (vpcc
) pcc
;
79 extern __typeof (++vi
) i
;
80 extern __typeof (++ai
) i
;
81 extern __typeof__ (--vi
) i
;
82 extern __typeof (--ai
) i
;
83 extern __typeof__ (vi
++) i
;
84 extern __typeof__ (ai
++) i
;
85 extern __typeof (vi
--) i
;
86 extern __typeof__ (ai
--) i
;
91 extern __typeof__ (++vb
) b
;
92 extern __typeof__ (++ab
) b
;
93 extern __typeof (--vb
) b
;
94 extern __typeof__ (--ab
) b
;
95 extern __typeof (vb
++) b
;
96 extern __typeof (ab
++) b
;
97 extern __typeof__ (vb
--) b
;
98 extern __typeof (ab
--) b
;
100 extern __typeof__ (vc
= 1) c
;
101 extern __typeof__ (vpcc
= 0) pcc
;
102 extern __typeof (ai
*= 2) i
;
104 int s
= sizeof (__typeof__ (int (*)[++i
]));
108 extern void abort (void);
109 extern void exit (int);
111 extern int only_used_in_typeof
;
113 static int not_defined (void);
116 main (__typeof (*vp
))
118 volatile __typeof__ (only_used_in_typeof
) ii
= 2;
121 const __typeof__ (not_defined ()) jj
= 3;
125 __typeof__ (u
) u2
= 0;
126 __typeof (int (*)[++u2
]) p
= 0;
129 if (sizeof (*p
) != sizeof (int))
131 __typeof_unqual (int (*)[++u2
]) q
= 0;
134 if (sizeof (*q
) != 2 * sizeof (int))
136 if (sizeof (*p
) != sizeof (int))
138 __typeof (++u2
) u3
= 1;
141 __typeof_unqual__ (++u2
) u4
= 2;
144 u
= sizeof (__typeof__ (int (*)[++u2
]));
147 u
= sizeof (__typeof_unqual (int (*)[++u2
]));
150 __typeof ((int (*)[++u2
]) 0) q2
;
153 __typeof ((void) 0, (int (*)[++u2
]) 0) q3
;
156 __typeof__ ((int (*)[++u2
]) 0, 0) q4
;
159 __typeof_unqual ((int (*)[++u2
]) 0) q5
;
162 __typeof_unqual__ ((void) 0, (int (*)[++u2
]) 0) q6
;
165 __typeof_unqual__ ((int (*)[++u2
]) 0, 0) q7
;
170 __typeof (pa
= &a2
) pp
;
173 __typeof_unqual (pa
= &a1
) pp2
;