1// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic
2
3extern int a1[];
4
5void f0();
6void f1(int [*]);
7void f2(int [const *]);
8void f3(int [volatile const*]);
9int f4(*XX)(void); /* expected-error {{cannot return}} expected-warning {{type specifier missing, defaults to 'int'}} */
10int f5(int [static]); /* expected-error {{'static' may not be used without an array size}} */
11
12char ((((*X))));
13
14void (*signal(int, void (*)(int)))(int);
15
16int aaaa, ***C, * const D, B(int);
17
18int *A;
19
20struct str;
21
22void test2(int *P, int A) {
23  struct str;
24
25  // Hard case for array decl, not Array[*].
26  int Array[*(int*)P+A];
27}
28
29typedef int atype;
30void test3(x,
31           atype         /* expected-error {{unexpected type name 'atype': expected identifier}} */
32          ) int x, atype; {}
33
34void test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */
35
36
37// PR3031
38int (test5), ;  // expected-error {{expected identifier or '('}}
39
40
41
42// PR3963 & rdar://6759604 - test error recovery for mistyped "typenames".
43
44foo_t *d;      // expected-error {{unknown type name 'foo_t'}}
45foo_t a;   // expected-error {{unknown type name 'foo_t'}}
46int test6() { return a; }  // a should be declared.
47
48// Use of tagged type without tag. rdar://6783347
49struct xyz { int y; };
50enum myenum { ASDFAS };
51xyz b;         // expected-error {{must use 'struct' tag to refer to type 'xyz'}}
52myenum c;      // expected-error {{must use 'enum' tag to refer to type 'myenum'}}
53
54float *test7() {
55  // We should recover 'b' by parsing it with a valid type of "struct xyz", which
56  // allows us to diagnose other bad things done with y, such as this.
57  return &b.y;   // expected-warning {{incompatible pointer types returning 'int *' from a function with result type 'float *'}}
58}
59
60struct xyz test8() { return a; }  // a should be be marked invalid, no diag.
61
62
63// Verify that implicit int still works.
64static f;      // expected-warning {{type specifier missing, defaults to 'int'}}
65static g = 4;  // expected-warning {{type specifier missing, defaults to 'int'}}
66static h        // expected-warning {{type specifier missing, defaults to 'int'}}
67      __asm__("foo");
68
69
70struct test9 {
71  int x  // expected-error {{expected ';' at end of declaration list}}
72  int y;
73  int z  // expected-warning {{expected ';' at end of declaration list}}
74};
75
76// PR6208
77struct test10 { int a; } static test10x;
78struct test11 { int a; } const test11x;
79
80// PR6216
81void test12() {
82  (void)__builtin_offsetof(struct { char c; int i; }, i);
83}
84
85// rdar://7608537
86struct test13 { int a; } (test13x);
87
88// <rdar://problem/8044088>
89struct X<foo::int> { }; // expected-error{{expected identifier or '('}}
90
91
92// PR7617 - error recovery on missing ;.
93
94void test14()  // expected-error {{expected ';' after top level declarator}}
95
96void test14a();
97void *test14b = (void*)test14a; // Make sure test14a didn't get skipped.
98
99// rdar://problem/8358508
100long struct X { int x; } test15(); // expected-error {{'long struct' is invalid}}
101
102void test16(i) int i j; { } // expected-error {{expected ';' at end of declaration}}
103void test17(i, j) int i, j k; { } // expected-error {{expected ';' at end of declaration}}
104void knrNoSemi(i) int i { } // expected-error {{expected ';' at end of declaration}}
105
106
107// PR12595
108void test18() {
109  int x = 4+(5-12));  // expected-error {{extraneous ')' before ';'}}
110}
111
112enum E1 { e1 }: // expected-error {{expected ';'}}
113struct EnumBitfield { // expected-warning {{struct without named members is a GNU extension}}
114  enum E2 { e2 } : 4; // ok
115  struct S { int n; }: // expected-error {{expected ';'}}
116                       // expected-warning@-1 {{declaration does not declare anything}}
117
118};
119
120// PR10982
121enum E11 {
122  A1 = 1,
123};
124
125enum E12 {
126  ,  // expected-error{{expected identifier}}
127  A2
128};
129void func_E12(enum E12 *p) { *p = A2; }
130
131enum E13 {
132  1D,  // expected-error{{expected identifier}}
133  A3
134};
135void func_E13(enum E13 *p) { *p = A3; }
136
137enum E14 {
138  A4 12,  // expected-error{{expected '= constant-expression' or end of enumerator definition}}
139  A4a
140};
141void func_E14(enum E14 *p) { *p = A4a; }
142
143enum E15 {
144  A5=12 4,  // expected-error{{expected '}' or ','}}
145  A5a
146};
147void func_E15(enum E15 *p) { *p = A5a; }
148
149enum E16 {
150  A6;  // expected-error{{expected '= constant-expression' or end of enumerator definition}}
151  A6a
152};
153
154int PR20634 = sizeof(struct { int n; } [5]);
155