1a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 2a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor 3a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// If T is the name of a class, then each of the following shall have 4a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// a name different from T: 5a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor 6a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// - every static data member of class T; 7a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregorstruct X0 { 8a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor static int X0; // expected-error{{member 'X0' has the same name as its class}} 9a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor}; 10a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor 11a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// - every member function of class T 12a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// (Cannot be tested) 13a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor 14a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// - every member of class T that is itself a type; 15a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregorstruct X1 { // expected-note{{previous use is here}} 16a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor enum X1 { }; // expected-error{{use of 'X1' with tag type that does not match previous declaration}} 17a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor}; 18a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor 19a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregorstruct X2 { 202fe9b7fb07dff15dd15dd8755a9a9e6de0fe46fcRichard Trieu typedef int X2; // expected-error{{member 'X2' has the same name as its class}} 21a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor}; 22a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor 23a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// - every enumerator of every member of class T that is an enumerated type; and 24a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregorstruct X3 { 25a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor enum E { 26a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor X3 // expected-error{{member 'X3' has the same name as its class}} 27a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor }; 28a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor}; 29a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor 30a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor// - every member of every anonymous union that is a member of class T. 31a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregorstruct X4 { 32a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor union { 33a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor int X; 34a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor union { 35a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor float Y; 36a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor unsigned X4; // expected-error{{member 'X4' has the same name as its class}} 37a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor }; 38a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor }; 39a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor}; 40a6e937ce32474934778346f4d51c3beec40e77ecDouglas Gregor 41