p1.cpp revision 75379455fc88ca1f021e55ffe1cab3a9c2b2a37a
142aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor// RUN: %clang_cc1 -fsyntax-only -verify %s 242aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor 342aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregornamespace PR8019 { 442aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor struct x; 542aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor template<typename T> struct x2; 642aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor struct y { 742aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor struct PR8019::x { int x; }; // expected-error{{non-friend class member 'x' cannot have a qualified name}} 842aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor 942aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor struct inner; 1075379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor struct y::inner { }; // expected-error{{extra qualification on member 'inner'}} 1142aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor 1242aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor template<typename T> 1342aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor struct PR8019::x2 { }; // expected-error{{non-friend class member 'x2' cannot have a qualified name}} 1442aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor 1542aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor template<typename T> 1642aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor struct inner_template; 1742aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor 1842aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor template<typename T> 1975379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor struct y::inner_template { }; // expected-error{{extra qualification on member 'inner_template'}} 2042aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor }; 2142aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor 2242aceadbc3806868cee8ac576347d258ac99e1f6Douglas Gregor} 236960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregor 246960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregornamespace NS { 256960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregor void foo(); 266960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregor extern int bar; 276960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregor struct X; 286960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregor template<typename T> struct Y; 296960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregor template<typename T> void wibble(T); 306960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregor} 316960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregornamespace NS { 3275379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor void NS::foo() {} // expected-error{{extra qualification on member 'foo'}} 3375379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor int NS::bar; // expected-error{{extra qualification on member 'bar'}} 3475379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor struct NS::X { }; // expected-error{{extra qualification on member 'X'}} 3575379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor template<typename T> struct NS::Y; // expected-error{{extra qualification on member 'Y'}} 3675379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor template<typename T> void NS::wibble(T) { } // expected-error{{extra qualification on member 'wibble'}} 376960587df0bd1b421c11715807a4d2302a3aae3cDouglas Gregor} 38