p1.cpp revision b2eb28ad57b13799403b6b7c30829601974fb18f
1b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 2b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 3b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregorstruct S 4b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor{ 5b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v1; // expected-note{{previous declaration is here}} 6b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor int v1; //expected-error{{duplicate member 'v1'}} 7b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor int v; //expected-note 2{{previous definition is here}} \ 8b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor // expected-note{{previous declaration is here}} 9b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v; //expected-error{{redefinition of 'v' as different kind of symbol}} 10b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor int v; //expected-error{{duplicate member 'v'}} 11b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v; //expected-error{{redefinition of 'v' as different kind of symbol}} 12b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor enum EnumT { E = 10 }; 13b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor friend struct M; 14b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor struct X; //expected-note{{forward declaration of 'S::X'}} 15b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor friend struct X; 16b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor}; 17b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 18b2eb28ad57b13799403b6b7c30829601974fb18fDouglas GregorS::EnumT Evar = S::E; // ok 19b2eb28ad57b13799403b6b7c30829601974fb18fDouglas GregorS::EnumT Evar2 = EnumT(); //expected-error{{use of undeclared identifier 'EnumT'}} 20b2eb28ad57b13799403b6b7c30829601974fb18fDouglas GregorS::M m; //expected-error{{no type named 'M' in 'S'}} 21b2eb28ad57b13799403b6b7c30829601974fb18fDouglas GregorS::X x; //expected-error{{variable has incomplete type 'S::X'}} 22b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 23b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 24b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregorstruct S2 25b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor{ 26b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v2; // expected-note{{previous declaration is here}} 27b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v2; //expected-error{{duplicate member 'v2'}} 28b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor}; 29b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 30b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregorstruct S3 31b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor{ 32b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v3; 33b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor struct S4 34b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor { 35b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v3; 36b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor }; 37b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor}; 38b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 39b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregorstruct S4 40b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor{ 41b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v4; 42b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor}; 43b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 44b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregorint S4::v4; //expected-note{{previous definition is here}} 45b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregorint S4::v4; //expected-error{{redefinition of 'v4'}} 46b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 47b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregorstruct S5 48b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor{ 49b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v5; //expected-note{{previous definition is here}} 50b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor void v5() { } //expected-error{{redefinition of 'v5' as different kind of symbol}} 51b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 52b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor void v6() { } //expected-note{{previous definition is here}} 53b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v6; //expected-error{{redefinition of 'v6' as different kind of symbol}} 54b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 55b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor void v7() { } 56b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor void v7(int) { } //expected-note{{previous definition is here}} 57b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor static int v7; //expected-error{{redefinition of 'v7' as different kind of symbol}} 58b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 59b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor void v8(); 60b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor int v8(int); //expected-note{{previous declaration is here}} 61b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor int v8; //expected-error{{duplicate member 'v8'}} 62b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 63b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor 64b2eb28ad57b13799403b6b7c30829601974fb18fDouglas Gregor}; 65