12299fc18956b8aca0ec270bc848987be53564438Benjamin Kramer// RUN: %clang_cc1 -fsyntax-only -verify %s 24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 474fa91164768a5469fd299206e893349dcd3c343John McCall 574fa91164768a5469fd299206e893349dcd3c343John McCall// This is just the test for [namespace.udecl]p4 with 'using' 674fa91164768a5469fd299206e893349dcd3c343John McCall// uniformly stripped out. 774fa91164768a5469fd299206e893349dcd3c343John McCall 874fa91164768a5469fd299206e893349dcd3c343John McCall// C++03 [namespace.udecl]p4: 974fa91164768a5469fd299206e893349dcd3c343John McCall// A using-declaration used as a member-declaration shall refer to a 1074fa91164768a5469fd299206e893349dcd3c343John McCall// member of a base class of the class being defined, shall refer to 1174fa91164768a5469fd299206e893349dcd3c343John McCall// a member of an anonymous union that is a member of a base class 1274fa91164768a5469fd299206e893349dcd3c343John McCall// of the class being defined, or shall refer to an enumerator for 1374fa91164768a5469fd299206e893349dcd3c343John McCall// an enumeration type that is a member of a base class of the class 1474fa91164768a5469fd299206e893349dcd3c343John McCall// being defined. 1574fa91164768a5469fd299206e893349dcd3c343John McCall 1674fa91164768a5469fd299206e893349dcd3c343John McCall// There is no directly analogous paragraph in C++0x, and the feature 1774fa91164768a5469fd299206e893349dcd3c343John McCall// works sufficiently differently there that it needs a separate test. 1874fa91164768a5469fd299206e893349dcd3c343John McCall 1974fa91164768a5469fd299206e893349dcd3c343John McCallnamespace test0 { 2074fa91164768a5469fd299206e893349dcd3c343John McCall namespace NonClass { 2174fa91164768a5469fd299206e893349dcd3c343John McCall typedef int type; 2274fa91164768a5469fd299206e893349dcd3c343John McCall struct hiding {}; 2374fa91164768a5469fd299206e893349dcd3c343John McCall int hiding; 2474fa91164768a5469fd299206e893349dcd3c343John McCall static union { double union_member; }; 2574fa91164768a5469fd299206e893349dcd3c343John McCall enum tagname { enumerator }; 2674fa91164768a5469fd299206e893349dcd3c343John McCall } 2774fa91164768a5469fd299206e893349dcd3c343John McCall 2874fa91164768a5469fd299206e893349dcd3c343John McCall class Test0 { 294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar NonClass::type; // expected-error {{not a class}} 304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar NonClass::hiding; // expected-error {{not a class}} 374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar NonClass::union_member; // expected-error {{not a class}} 444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar NonClass::enumerator; // expected-error {{not a class}} 514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 5674fa91164768a5469fd299206e893349dcd3c343John McCall }; 5774fa91164768a5469fd299206e893349dcd3c343John McCall} 5874fa91164768a5469fd299206e893349dcd3c343John McCall 5974fa91164768a5469fd299206e893349dcd3c343John McCallstruct Opaque0 {}; 6074fa91164768a5469fd299206e893349dcd3c343John McCall 6174fa91164768a5469fd299206e893349dcd3c343John McCallnamespace test1 { 6274fa91164768a5469fd299206e893349dcd3c343John McCall struct A { 6374fa91164768a5469fd299206e893349dcd3c343John McCall typedef int type; 6474fa91164768a5469fd299206e893349dcd3c343John McCall struct hiding {}; // expected-note {{previous use is here}} 6574fa91164768a5469fd299206e893349dcd3c343John McCall Opaque0 hiding; 6674fa91164768a5469fd299206e893349dcd3c343John McCall union { double union_member; }; 6774fa91164768a5469fd299206e893349dcd3c343John McCall enum tagname { enumerator }; 6874fa91164768a5469fd299206e893349dcd3c343John McCall }; 6974fa91164768a5469fd299206e893349dcd3c343John McCall 7074fa91164768a5469fd299206e893349dcd3c343John McCall struct B : A { 714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::type; 724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::hiding; 784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::union_member; 854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::enumerator; 924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::tagname; 994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 10474fa91164768a5469fd299206e893349dcd3c343John McCall 10574fa91164768a5469fd299206e893349dcd3c343John McCall void test0() { 10674fa91164768a5469fd299206e893349dcd3c343John McCall type t = 0; 10774fa91164768a5469fd299206e893349dcd3c343John McCall } 10874fa91164768a5469fd299206e893349dcd3c343John McCall 10974fa91164768a5469fd299206e893349dcd3c343John McCall void test1() { 11074fa91164768a5469fd299206e893349dcd3c343John McCall typedef struct A::hiding local; 11174fa91164768a5469fd299206e893349dcd3c343John McCall struct hiding _ = local(); 11274fa91164768a5469fd299206e893349dcd3c343John McCall } 11374fa91164768a5469fd299206e893349dcd3c343John McCall 11474fa91164768a5469fd299206e893349dcd3c343John McCall void test2() { 11574fa91164768a5469fd299206e893349dcd3c343John McCall union hiding _; // expected-error {{tag type that does not match previous}} 11674fa91164768a5469fd299206e893349dcd3c343John McCall } 11774fa91164768a5469fd299206e893349dcd3c343John McCall 11874fa91164768a5469fd299206e893349dcd3c343John McCall void test3() { 11974fa91164768a5469fd299206e893349dcd3c343John McCall char array[sizeof(union_member) == sizeof(double) ? 1 : -1]; 12074fa91164768a5469fd299206e893349dcd3c343John McCall } 12174fa91164768a5469fd299206e893349dcd3c343John McCall 12274fa91164768a5469fd299206e893349dcd3c343John McCall void test4() { 12374fa91164768a5469fd299206e893349dcd3c343John McCall enum tagname _ = enumerator; 12474fa91164768a5469fd299206e893349dcd3c343John McCall } 12574fa91164768a5469fd299206e893349dcd3c343John McCall 12674fa91164768a5469fd299206e893349dcd3c343John McCall void test5() { 12774fa91164768a5469fd299206e893349dcd3c343John McCall Opaque0 _ = hiding; 12874fa91164768a5469fd299206e893349dcd3c343John McCall } 12974fa91164768a5469fd299206e893349dcd3c343John McCall }; 13074fa91164768a5469fd299206e893349dcd3c343John McCall} 13174fa91164768a5469fd299206e893349dcd3c343John McCall 13274fa91164768a5469fd299206e893349dcd3c343John McCallnamespace test2 { 13374fa91164768a5469fd299206e893349dcd3c343John McCall struct A { 13474fa91164768a5469fd299206e893349dcd3c343John McCall typedef int type; 13574fa91164768a5469fd299206e893349dcd3c343John McCall struct hiding {}; // expected-note {{previous use is here}} 13674fa91164768a5469fd299206e893349dcd3c343John McCall int hiding; 13774fa91164768a5469fd299206e893349dcd3c343John McCall union { double union_member; }; 13874fa91164768a5469fd299206e893349dcd3c343John McCall enum tagname { enumerator }; 13974fa91164768a5469fd299206e893349dcd3c343John McCall }; 14074fa91164768a5469fd299206e893349dcd3c343John McCall 14174fa91164768a5469fd299206e893349dcd3c343John McCall template <class T> struct B : A { 1424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::type; 1434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 1444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::hiding; 1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 1534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 1544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 1554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::union_member; 1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 1584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 1604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 1614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 1624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::enumerator; 1644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 1654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 1664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 1674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 1684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 1694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A::tagname; 1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 17674fa91164768a5469fd299206e893349dcd3c343John McCall 17774fa91164768a5469fd299206e893349dcd3c343John McCall void test0() { 17874fa91164768a5469fd299206e893349dcd3c343John McCall type t = 0; 17974fa91164768a5469fd299206e893349dcd3c343John McCall } 18074fa91164768a5469fd299206e893349dcd3c343John McCall 18174fa91164768a5469fd299206e893349dcd3c343John McCall void test1() { 18274fa91164768a5469fd299206e893349dcd3c343John McCall typedef struct A::hiding local; 18374fa91164768a5469fd299206e893349dcd3c343John McCall struct hiding _ = local(); 18474fa91164768a5469fd299206e893349dcd3c343John McCall } 18574fa91164768a5469fd299206e893349dcd3c343John McCall 18674fa91164768a5469fd299206e893349dcd3c343John McCall void test2() { 18774fa91164768a5469fd299206e893349dcd3c343John McCall union hiding _; // expected-error {{tag type that does not match previous}} 18874fa91164768a5469fd299206e893349dcd3c343John McCall } 18974fa91164768a5469fd299206e893349dcd3c343John McCall 19074fa91164768a5469fd299206e893349dcd3c343John McCall void test3() { 19174fa91164768a5469fd299206e893349dcd3c343John McCall char array[sizeof(union_member) == sizeof(double) ? 1 : -1]; 19274fa91164768a5469fd299206e893349dcd3c343John McCall } 19374fa91164768a5469fd299206e893349dcd3c343John McCall 19474fa91164768a5469fd299206e893349dcd3c343John McCall void test4() { 19574fa91164768a5469fd299206e893349dcd3c343John McCall enum tagname _ = enumerator; 19674fa91164768a5469fd299206e893349dcd3c343John McCall } 19774fa91164768a5469fd299206e893349dcd3c343John McCall 19874fa91164768a5469fd299206e893349dcd3c343John McCall void test5() { 19974fa91164768a5469fd299206e893349dcd3c343John McCall Opaque0 _ = hiding; 20074fa91164768a5469fd299206e893349dcd3c343John McCall } 20174fa91164768a5469fd299206e893349dcd3c343John McCall }; 20274fa91164768a5469fd299206e893349dcd3c343John McCall} 20374fa91164768a5469fd299206e893349dcd3c343John McCall 20474fa91164768a5469fd299206e893349dcd3c343John McCallnamespace test3 { 20574fa91164768a5469fd299206e893349dcd3c343John McCall struct hiding {}; 20674fa91164768a5469fd299206e893349dcd3c343John McCall 20774fa91164768a5469fd299206e893349dcd3c343John McCall template <class T> struct A { 20874fa91164768a5469fd299206e893349dcd3c343John McCall typedef int type; // expected-note {{target of using declaration}} 20974fa91164768a5469fd299206e893349dcd3c343John McCall struct hiding {}; 21074fa91164768a5469fd299206e893349dcd3c343John McCall Opaque0 hiding; 21174fa91164768a5469fd299206e893349dcd3c343John McCall union { double union_member; }; 21274fa91164768a5469fd299206e893349dcd3c343John McCall enum tagname { enumerator }; // expected-note {{target of using declaration}} 21374fa91164768a5469fd299206e893349dcd3c343John McCall }; 21474fa91164768a5469fd299206e893349dcd3c343John McCall 21574fa91164768a5469fd299206e893349dcd3c343John McCall template <class T> struct B : A<T> { 2164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A<T>::type; // expected-error {{dependent using declaration resolved to type without 'typename'}} 2174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 2184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 2194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 2204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 2214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 2224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A<T>::hiding; 2244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 2254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 2264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A<T>::union_member; 2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 2344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 2354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 2364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A<T>::enumerator; 2384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 2394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 2404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 2414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 2424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 2434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar A<T>::tagname; // expected-error {{dependent using declaration resolved to type without 'typename'}} 2454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 2464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 2474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 2484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 2494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 25074fa91164768a5469fd299206e893349dcd3c343John McCall 25174fa91164768a5469fd299206e893349dcd3c343John McCall // FIXME: re-enable these when the various bugs involving tags are fixed 25274fa91164768a5469fd299206e893349dcd3c343John McCall#if 0 25374fa91164768a5469fd299206e893349dcd3c343John McCall void test1() { 25474fa91164768a5469fd299206e893349dcd3c343John McCall typedef struct A<T>::hiding local; 25574fa91164768a5469fd299206e893349dcd3c343John McCall struct hiding _ = local(); 25674fa91164768a5469fd299206e893349dcd3c343John McCall } 25774fa91164768a5469fd299206e893349dcd3c343John McCall 25874fa91164768a5469fd299206e893349dcd3c343John McCall void test2() { 25974fa91164768a5469fd299206e893349dcd3c343John McCall typedef struct A<T>::hiding local; 26074fa91164768a5469fd299206e893349dcd3c343John McCall union hiding _ = local(); 26174fa91164768a5469fd299206e893349dcd3c343John McCall } 26274fa91164768a5469fd299206e893349dcd3c343John McCall#endif 26374fa91164768a5469fd299206e893349dcd3c343John McCall 26474fa91164768a5469fd299206e893349dcd3c343John McCall void test3() { 26574fa91164768a5469fd299206e893349dcd3c343John McCall char array[sizeof(union_member) == sizeof(double) ? 1 : -1]; 26674fa91164768a5469fd299206e893349dcd3c343John McCall } 26774fa91164768a5469fd299206e893349dcd3c343John McCall 26874fa91164768a5469fd299206e893349dcd3c343John McCall#if 0 26974fa91164768a5469fd299206e893349dcd3c343John McCall void test4() { 27074fa91164768a5469fd299206e893349dcd3c343John McCall enum tagname _ = enumerator; 27174fa91164768a5469fd299206e893349dcd3c343John McCall } 27274fa91164768a5469fd299206e893349dcd3c343John McCall#endif 27374fa91164768a5469fd299206e893349dcd3c343John McCall 27474fa91164768a5469fd299206e893349dcd3c343John McCall void test5() { 27574fa91164768a5469fd299206e893349dcd3c343John McCall Opaque0 _ = hiding; 27674fa91164768a5469fd299206e893349dcd3c343John McCall } 27774fa91164768a5469fd299206e893349dcd3c343John McCall }; 27874fa91164768a5469fd299206e893349dcd3c343John McCall 27974fa91164768a5469fd299206e893349dcd3c343John McCall template struct B<int>; // expected-note {{in instantiation}} 28074fa91164768a5469fd299206e893349dcd3c343John McCall} 28174fa91164768a5469fd299206e893349dcd3c343John McCall 28274fa91164768a5469fd299206e893349dcd3c343John McCallnamespace test4 { 28374fa91164768a5469fd299206e893349dcd3c343John McCall struct Base { 28474fa91164768a5469fd299206e893349dcd3c343John McCall int foo(); 28574fa91164768a5469fd299206e893349dcd3c343John McCall }; 28674fa91164768a5469fd299206e893349dcd3c343John McCall 28774fa91164768a5469fd299206e893349dcd3c343John McCall struct Unrelated { 28874fa91164768a5469fd299206e893349dcd3c343John McCall int foo(); 28974fa91164768a5469fd299206e893349dcd3c343John McCall }; 29074fa91164768a5469fd299206e893349dcd3c343John McCall 29174fa91164768a5469fd299206e893349dcd3c343John McCall struct Subclass : Base { 29274fa91164768a5469fd299206e893349dcd3c343John McCall }; 29374fa91164768a5469fd299206e893349dcd3c343John McCall 29474fa91164768a5469fd299206e893349dcd3c343John McCall namespace InnerNS { 29574fa91164768a5469fd299206e893349dcd3c343John McCall int foo(); 29674fa91164768a5469fd299206e893349dcd3c343John McCall } 29774fa91164768a5469fd299206e893349dcd3c343John McCall 29874fa91164768a5469fd299206e893349dcd3c343John McCall // We should be able to diagnose these without instantiation. 29974fa91164768a5469fd299206e893349dcd3c343John McCall template <class T> struct C : Base { 3004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar InnerNS::foo; // expected-error {{not a class}} 3014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 3024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 3034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 3044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 3054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 3064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Base::bar; // expected-error {{no member named 'bar'}} 3084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 3094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 3104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 3114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 3124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 3134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Unrelated::foo; // expected-error {{not a base class}} 3154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 3164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 3174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 3184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 3194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 3204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar C::foo; // legal in C++03 3224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 3234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 3244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 3254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 3264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-5 {{using declaration refers to its own class}} 3274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 3284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Subclass::foo; // legal in C++03 3304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 3314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 3324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 3334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 3344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-5 {{using declaration refers into 'Subclass::', which is not a base class of 'C'}} 3354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 3364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar int bar(); 3384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 3394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar //expected-note@-2 {{target of using declaration}} 3404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 3414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar C::bar; 3424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#if __cplusplus <= 199711L 3434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-warning@-2 {{access declarations are deprecated; use using declarations instead}} 3444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#else 3454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-4 {{ISO C++11 does not allow access declarations; use using declarations instead}} 3464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#endif 3474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // expected-error@-6 {{using declaration refers to its own class}} 34874fa91164768a5469fd299206e893349dcd3c343John McCall }; 34974fa91164768a5469fd299206e893349dcd3c343John McCall} 35074fa91164768a5469fd299206e893349dcd3c343John McCall 351