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