1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerextern int a1[];
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
55f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid f0();
65f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid f1(int [*]);
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid f2(int [const *]);
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid f3(int [volatile const*]);
9d658b562e80d6ef7a1118e34ff12802c6e2fccedChris Lattnerint f4(*XX)(void); /* expected-error {{cannot return}} expected-warning {{type specifier missing, defaults to 'int'}} */
10176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesint f5(int [static]); /* expected-error {{'static' may not be used without an array size}} */
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerchar ((((*X))));
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid (*signal(int, void (*)(int)))(int);
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1633c6ebef6f9acad6eb667fff77ff78f0c169332cChris Lattnerint aaaa, ***C, * const D, B(int);
175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerint *A;
195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstruct str;
215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
22d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stumpvoid test2(int *P, int A) {
235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  struct str;
245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  // Hard case for array decl, not Array[*].
265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  int Array[*(int*)P+A];
275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}
285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
29aaf9ddbeab08a43203cf6b9ca4986c8c6fe6fdc6Chris Lattnertypedef int atype;
30d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stumpvoid test3(x,
31d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stump           atype         /* expected-error {{unexpected type name 'atype': expected identifier}} */
32d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stump          ) int x, atype; {}
335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
34d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stumpvoid test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */
353825c2eb00f108854942533a4993327889c081c3Chris Lattner
361f6f54be86a514d531ec231fd837858a43cfe72eChris Lattner
371f6f54be86a514d531ec231fd837858a43cfe72eChris Lattner// PR3031
381f6f54be86a514d531ec231fd837858a43cfe72eChris Lattnerint (test5), ;  // expected-error {{expected identifier or '('}}
391f6f54be86a514d531ec231fd837858a43cfe72eChris Lattner
40c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
41c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
42c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner// PR3963 & rdar://6759604 - test error recovery for mistyped "typenames".
43c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
444c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerfoo_t *d;      // expected-error {{unknown type name 'foo_t'}}
4533c6ebef6f9acad6eb667fff77ff78f0c169332cChris Lattnerfoo_t a;   // expected-error {{unknown type name 'foo_t'}}
464c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerint test6() { return a; }  // a should be declared.
474c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner
484c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner// Use of tagged type without tag. rdar://6783347
494c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerstruct xyz { int y; };
504c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerenum myenum { ASDFAS };
5123e907ab9119ccfdff17b3808a770c5a6707fb95John McCallxyz b;         // expected-error {{must use 'struct' tag to refer to type 'xyz'}}
5223e907ab9119ccfdff17b3808a770c5a6707fb95John McCallmyenum c;      // expected-error {{must use 'enum' tag to refer to type 'myenum'}}
534c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner
544c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerfloat *test7() {
554c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner  // We should recover 'b' by parsing it with a valid type of "struct xyz", which
564c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner  // allows us to diagnose other bad things done with y, such as this.
57d4eea8362605807327735727a9098abe1eb23b19Douglas Gregor  return &b.y;   // expected-warning {{incompatible pointer types returning 'int *' from a function with result type 'float *'}}
584c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner}
59c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
6033c6ebef6f9acad6eb667fff77ff78f0c169332cChris Lattnerstruct xyz test8() { return a; }  // a should be be marked invalid, no diag.
6133c6ebef6f9acad6eb667fff77ff78f0c169332cChris Lattner
62c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
634c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner// Verify that implicit int still works.
64c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattnerstatic f;      // expected-warning {{type specifier missing, defaults to 'int'}}
65c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattnerstatic g = 4;  // expected-warning {{type specifier missing, defaults to 'int'}}
66c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattnerstatic h        // expected-warning {{type specifier missing, defaults to 'int'}}
67eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman      __asm__("foo");
683e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner
693e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner
703e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattnerstruct test9 {
713e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner  int x  // expected-error {{expected ';' at end of declaration list}}
723e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner  int y;
733e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner  int z  // expected-warning {{expected ';' at end of declaration list}}
743e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner};
7599c952046600f6bfccf315aa7ad5b1be2d242cc3Chris Lattner
7699c952046600f6bfccf315aa7ad5b1be2d242cc3Chris Lattner// PR6208
7799c952046600f6bfccf315aa7ad5b1be2d242cc3Chris Lattnerstruct test10 { int a; } static test10x;
7899c952046600f6bfccf315aa7ad5b1be2d242cc3Chris Lattnerstruct test11 { int a; } const test11x;
7916acfee729e00536af827935ccfcf69be721e462Chris Lattner
8016acfee729e00536af827935ccfcf69be721e462Chris Lattner// PR6216
8116acfee729e00536af827935ccfcf69be721e462Chris Lattnervoid test12() {
8216acfee729e00536af827935ccfcf69be721e462Chris Lattner  (void)__builtin_offsetof(struct { char c; int i; }, i);
8316acfee729e00536af827935ccfcf69be721e462Chris Lattner}
84c2e1c1af8ffe750b827284f207b9207112c7cc4eChris Lattner
85c2e1c1af8ffe750b827284f207b9207112c7cc4eChris Lattner// rdar://7608537
86c2e1c1af8ffe750b827284f207b9207112c7cc4eChris Lattnerstruct test13 { int a; } (test13x);
875ee3734c0b5222a7c445591a1f14102c1b3a289bDouglas Gregor
885ee3734c0b5222a7c445591a1f14102c1b3a289bDouglas Gregor// <rdar://problem/8044088>
895ee3734c0b5222a7c445591a1f14102c1b3a289bDouglas Gregorstruct X<foo::int> { }; // expected-error{{expected identifier or '('}}
90004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner
91004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner
92004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner// PR7617 - error recovery on missing ;.
93004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner
949b3215d5aba6c687a3ee46b0f36367f416ac34ccChris Lattnervoid test14()  // expected-error {{expected ';' after top level declarator}}
95004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner
96004659a56916f2f81ede507c12516c146d6c0df3Chris Lattnervoid test14a();
97004659a56916f2f81ede507c12516c146d6c0df3Chris Lattnervoid *test14b = (void*)test14a; // Make sure test14a didn't get skipped.
989e46b8cfb3e6c6feab5664744f52f06a40f9566bJohn McCall
999e46b8cfb3e6c6feab5664744f52f06a40f9566bJohn McCall// rdar://problem/8358508
100cebc3769077bb22003dc47bd22868d0b4c6ce106John McCalllong struct X { int x; } test15(); // expected-error {{'long struct' is invalid}}
101b031eab1c07fa2c5bd74c7e92f7c938bf3304729David Blaikie
102b031eab1c07fa2c5bd74c7e92f7c938bf3304729David Blaikievoid test16(i) int i j; { } // expected-error {{expected ';' at end of declaration}}
103b031eab1c07fa2c5bd74c7e92f7c938bf3304729David Blaikievoid test17(i, j) int i, j k; { } // expected-error {{expected ';' at end of declaration}}
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid knrNoSemi(i) int i { } // expected-error {{expected ';' at end of declaration}}
1058bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner
1068bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner
1078bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner// PR12595
1088bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattnervoid test18() {
1098bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner  int x = 4+(5-12));  // expected-error {{extraneous ')' before ';'}}
1108bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner}
1118bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner
112139be7007eba3bd491ca50297888be507753a95dRichard Smithenum E1 { e1 }: // expected-error {{expected ';'}}
113122e601886ae527d6e7100c589339c05190a168aSerge Pavlovstruct EnumBitfield { // expected-warning {{struct without named members is a GNU extension}}
114139be7007eba3bd491ca50297888be507753a95dRichard Smith  enum E2 { e2 } : 4; // ok
115139be7007eba3bd491ca50297888be507753a95dRichard Smith  struct S { int n; }: // expected-error {{expected ';'}}
116176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines                       // expected-warning@-1 {{declaration does not declare anything}}
117122e601886ae527d6e7100c589339c05190a168aSerge Pavlov
118139be7007eba3bd491ca50297888be507753a95dRichard Smith};
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// PR10982
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E11 {
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A1 = 1,
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E12 {
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  ,  // expected-error{{expected identifier}}
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A2
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid func_E12(enum E12 *p) { *p = A2; }
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E13 {
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  1D,  // expected-error{{expected identifier}}
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A3
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid func_E13(enum E13 *p) { *p = A3; }
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E14 {
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A4 12,  // expected-error{{expected '= constant-expression' or end of enumerator definition}}
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A4a
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid func_E14(enum E14 *p) { *p = A4a; }
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E15 {
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A5=12 4,  // expected-error{{expected '}' or ','}}
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A5a
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid func_E15(enum E15 *p) { *p = A5a; }
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E16 {
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A6;  // expected-error{{expected '= constant-expression' or end of enumerator definition}}
151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A6a
152651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
153176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
154176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesint PR20634 = sizeof(struct { int n; } [5]);
155