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'}} */
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerchar ((((*X))));
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencervoid (*signal(int, void (*)(int)))(int);
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1533c6ebef6f9acad6eb667fff77ff78f0c169332cChris Lattnerint aaaa, ***C, * const D, B(int);
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerint *A;
185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerstruct str;
205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
21d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stumpvoid test2(int *P, int A) {
225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  struct str;
235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  // Hard case for array decl, not Array[*].
255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  int Array[*(int*)P+A];
265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}
275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
28aaf9ddbeab08a43203cf6b9ca4986c8c6fe6fdc6Chris Lattnertypedef int atype;
29d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stumpvoid test3(x,
30d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stump           atype         /* expected-error {{unexpected type name 'atype': expected identifier}} */
31d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stump          ) int x, atype; {}
325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
33d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stumpvoid test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */
343825c2eb00f108854942533a4993327889c081c3Chris Lattner
351f6f54be86a514d531ec231fd837858a43cfe72eChris Lattner
361f6f54be86a514d531ec231fd837858a43cfe72eChris Lattner// PR3031
371f6f54be86a514d531ec231fd837858a43cfe72eChris Lattnerint (test5), ;  // expected-error {{expected identifier or '('}}
381f6f54be86a514d531ec231fd837858a43cfe72eChris Lattner
39c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
40c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
41c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner// PR3963 & rdar://6759604 - test error recovery for mistyped "typenames".
42c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
434c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerfoo_t *d;      // expected-error {{unknown type name 'foo_t'}}
4433c6ebef6f9acad6eb667fff77ff78f0c169332cChris Lattnerfoo_t a;   // expected-error {{unknown type name 'foo_t'}}
454c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerint test6() { return a; }  // a should be declared.
464c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner
474c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner// Use of tagged type without tag. rdar://6783347
484c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerstruct xyz { int y; };
494c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerenum myenum { ASDFAS };
5023e907ab9119ccfdff17b3808a770c5a6707fb95John McCallxyz b;         // expected-error {{must use 'struct' tag to refer to type 'xyz'}}
5123e907ab9119ccfdff17b3808a770c5a6707fb95John McCallmyenum c;      // expected-error {{must use 'enum' tag to refer to type 'myenum'}}
524c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner
534c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattnerfloat *test7() {
544c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner  // We should recover 'b' by parsing it with a valid type of "struct xyz", which
554c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner  // allows us to diagnose other bad things done with y, such as this.
56d4eea8362605807327735727a9098abe1eb23b19Douglas Gregor  return &b.y;   // expected-warning {{incompatible pointer types returning 'int *' from a function with result type 'float *'}}
574c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner}
58c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
5933c6ebef6f9acad6eb667fff77ff78f0c169332cChris Lattnerstruct xyz test8() { return a; }  // a should be be marked invalid, no diag.
6033c6ebef6f9acad6eb667fff77ff78f0c169332cChris Lattner
61c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattner
624c97d762d8c5a84f6554e5bfb31d28c90df64158Chris Lattner// Verify that implicit int still works.
63c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattnerstatic f;      // expected-warning {{type specifier missing, defaults to 'int'}}
64c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattnerstatic g = 4;  // expected-warning {{type specifier missing, defaults to 'int'}}
65c199ab3ea1381e8e9cdd720eb87bb4f65cdf5086Chris Lattnerstatic h        // expected-warning {{type specifier missing, defaults to 'int'}}
66eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman      __asm__("foo");
673e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner
683e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner
693e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattnerstruct test9 {
703e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner  int x  // expected-error {{expected ';' at end of declaration list}}
713e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner  int y;
723e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner  int z  // expected-warning {{expected ';' at end of declaration list}}
733e156ad9adc7332e626eedbc86aa4e3b03f17ca5Chris Lattner};
7499c952046600f6bfccf315aa7ad5b1be2d242cc3Chris Lattner
7599c952046600f6bfccf315aa7ad5b1be2d242cc3Chris Lattner// PR6208
7699c952046600f6bfccf315aa7ad5b1be2d242cc3Chris Lattnerstruct test10 { int a; } static test10x;
7799c952046600f6bfccf315aa7ad5b1be2d242cc3Chris Lattnerstruct test11 { int a; } const test11x;
7816acfee729e00536af827935ccfcf69be721e462Chris Lattner
7916acfee729e00536af827935ccfcf69be721e462Chris Lattner// PR6216
8016acfee729e00536af827935ccfcf69be721e462Chris Lattnervoid test12() {
8116acfee729e00536af827935ccfcf69be721e462Chris Lattner  (void)__builtin_offsetof(struct { char c; int i; }, i);
8216acfee729e00536af827935ccfcf69be721e462Chris Lattner}
83c2e1c1af8ffe750b827284f207b9207112c7cc4eChris Lattner
84c2e1c1af8ffe750b827284f207b9207112c7cc4eChris Lattner// rdar://7608537
85c2e1c1af8ffe750b827284f207b9207112c7cc4eChris Lattnerstruct test13 { int a; } (test13x);
865ee3734c0b5222a7c445591a1f14102c1b3a289bDouglas Gregor
875ee3734c0b5222a7c445591a1f14102c1b3a289bDouglas Gregor// <rdar://problem/8044088>
885ee3734c0b5222a7c445591a1f14102c1b3a289bDouglas Gregorstruct X<foo::int> { }; // expected-error{{expected identifier or '('}}
89004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner
90004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner
91004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner// PR7617 - error recovery on missing ;.
92004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner
939b3215d5aba6c687a3ee46b0f36367f416ac34ccChris Lattnervoid test14()  // expected-error {{expected ';' after top level declarator}}
94004659a56916f2f81ede507c12516c146d6c0df3Chris Lattner
95004659a56916f2f81ede507c12516c146d6c0df3Chris Lattnervoid test14a();
96004659a56916f2f81ede507c12516c146d6c0df3Chris Lattnervoid *test14b = (void*)test14a; // Make sure test14a didn't get skipped.
979e46b8cfb3e6c6feab5664744f52f06a40f9566bJohn McCall
989e46b8cfb3e6c6feab5664744f52f06a40f9566bJohn McCall// rdar://problem/8358508
99cebc3769077bb22003dc47bd22868d0b4c6ce106John McCalllong struct X { int x; } test15(); // expected-error {{'long struct' is invalid}}
100b031eab1c07fa2c5bd74c7e92f7c938bf3304729David Blaikie
101b031eab1c07fa2c5bd74c7e92f7c938bf3304729David Blaikievoid test16(i) int i j; { } // expected-error {{expected ';' at end of declaration}}
102b031eab1c07fa2c5bd74c7e92f7c938bf3304729David Blaikievoid test17(i, j) int i, j k; { } // expected-error {{expected ';' at end of declaration}}
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid knrNoSemi(i) int i { } // expected-error {{expected ';' at end of declaration}}
1048bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner
1058bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner
1068bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner// PR12595
1078bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattnervoid test18() {
1088bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner  int x = 4+(5-12));  // expected-error {{extraneous ')' before ';'}}
1098bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner}
1108bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner
111139be7007eba3bd491ca50297888be507753a95dRichard Smithenum E1 { e1 }: // expected-error {{expected ';'}}
112122e601886ae527d6e7100c589339c05190a168aSerge Pavlovstruct EnumBitfield { // expected-warning {{struct without named members is a GNU extension}}
113139be7007eba3bd491ca50297888be507753a95dRichard Smith  enum E2 { e2 } : 4; // ok
114139be7007eba3bd491ca50297888be507753a95dRichard Smith  struct S { int n; }: // expected-error {{expected ';'}}
115122e601886ae527d6e7100c589339c05190a168aSerge Pavlov
116139be7007eba3bd491ca50297888be507753a95dRichard Smith};
117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// PR10982
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E11 {
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A1 = 1,
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E12 {
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  ,  // expected-error{{expected identifier}}
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A2
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid func_E12(enum E12 *p) { *p = A2; }
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E13 {
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  1D,  // expected-error{{expected identifier}}
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A3
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid func_E13(enum E13 *p) { *p = A3; }
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E14 {
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A4 12,  // expected-error{{expected '= constant-expression' or end of enumerator definition}}
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A4a
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid func_E14(enum E14 *p) { *p = A4a; }
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E15 {
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A5=12 4,  // expected-error{{expected '}' or ','}}
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A5a
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid func_E15(enum E15 *p) { *p = A5a; }
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum E16 {
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A6;  // expected-error{{expected '= constant-expression' or end of enumerator definition}}
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  A6a
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
151