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}} 1038bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner 1048bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner 1058bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner// PR12595 1068bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattnervoid test18() { 1078bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner int x = 4+(5-12)); // expected-error {{extraneous ')' before ';'}} 1088bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner} 1098bb21d32e9ccc9d9c221506dff26acafa8724ccaChris Lattner 110139be7007eba3bd491ca50297888be507753a95dRichard Smithenum E1 { e1 }: // expected-error {{expected ';'}} 111122e601886ae527d6e7100c589339c05190a168aSerge Pavlovstruct EnumBitfield { // expected-warning {{struct without named members is a GNU extension}} 112139be7007eba3bd491ca50297888be507753a95dRichard Smith enum E2 { e2 } : 4; // ok 113139be7007eba3bd491ca50297888be507753a95dRichard Smith struct S { int n; }: // expected-error {{expected ';'}} 114122e601886ae527d6e7100c589339c05190a168aSerge Pavlov 115139be7007eba3bd491ca50297888be507753a95dRichard Smith}; 116