diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-03-17 23:06:31 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-03-17 23:06:31 +0000 |
commit | 31feb337a606f4417fbaa4160ed16405de60f609 (patch) | |
tree | 57307caa9455eb4175bf2009a3a7d64e713cef62 /clang/test | |
parent | 35e71c771d2ebe4c18f2160bf391fe274e6a800e (diff) | |
download | bcm5719-llvm-31feb337a606f4417fbaa4160ed16405de60f609.tar.gz bcm5719-llvm-31feb337a606f4417fbaa4160ed16405de60f609.zip |
Diagnose tag and class template declarations with qualified
declarator-ids that occur at class scope. Fixes PR8019.
llvm-svn: 153002
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/CXX/class.access/p4.cpp | 2 | ||||
-rw-r--r-- | clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp | 22 | ||||
-rw-r--r-- | clang/test/SemaCXX/nested-name-spec.cpp | 3 |
3 files changed, 25 insertions, 2 deletions
diff --git a/clang/test/CXX/class.access/p4.cpp b/clang/test/CXX/class.access/p4.cpp index add3635fa63..058a158beb6 100644 --- a/clang/test/CXX/class.access/p4.cpp +++ b/clang/test/CXX/class.access/p4.cpp @@ -481,7 +481,7 @@ namespace test21 { }; template <class T> class A<T>::Inner {}; class B { - template <class T> class A<T>::Inner; + template <class T> class A<T>::Inner; // expected-error{{non-friend class member 'Inner' cannot have a qualified name}} }; void test() { diff --git a/clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp b/clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp new file mode 100644 index 00000000000..9aa3a20bcd6 --- /dev/null +++ b/clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +namespace PR8019 { + struct x; + template<typename T> struct x2; + struct y { + struct PR8019::x { int x; }; // expected-error{{non-friend class member 'x' cannot have a qualified name}} + + struct inner; + struct y::inner { }; // expected-warning{{extra qualification on member 'inner'}} + + template<typename T> + struct PR8019::x2 { }; // expected-error{{non-friend class member 'x2' cannot have a qualified name}} + + template<typename T> + struct inner_template; + + template<typename T> + struct y::inner_template { }; // expected-warning{{extra qualification on member 'inner_template'}} + }; + +} diff --git a/clang/test/SemaCXX/nested-name-spec.cpp b/clang/test/SemaCXX/nested-name-spec.cpp index e13030cc38a..6b3cb23e2aa 100644 --- a/clang/test/SemaCXX/nested-name-spec.cpp +++ b/clang/test/SemaCXX/nested-name-spec.cpp @@ -274,7 +274,8 @@ struct A { protected: struct B; struct B::C; // expected-error {{requires a template parameter list}} \ - // expected-error {{no struct named 'C'}} + // expected-error {{no struct named 'C'}} \ + // expected-error{{non-friend class member 'C' cannot have a qualified name}} }; template<typename T> |