From b55ad4b0d8c37aeaf0cd609115b60ead482afaaf Mon Sep 17 00:00:00 2001 From: nathan Date: Sat, 6 Sep 2003 18:37:57 +0000 Subject: [PATCH] cp: PR c++/11794 * class.c (pushclass): Push dependent using decls for nested classes of templates too. testsuite: PR c++/11794 * g++.dg/parse/using3.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71143 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/class.c | 4 ++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/parse/using3.C | 22 ++++++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/parse/using3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 944bfd789ee..0e657be9407 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-09-06 Nathan Sidwell + + PR c++/11794 + * class.c (pushclass): Push dependent using decls for nested + classes of templates too. + 2003-09-06 Roger Sayle PR c++/11409 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 80765c0d960..d17ff5ad0b7 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -5466,9 +5466,9 @@ pushclass (tree type) if (type != previous_class_type || current_class_depth > 1) { push_class_decls (type); - if (CLASSTYPE_IS_TEMPLATE (type)) + if (CLASSTYPE_TEMPLATE_INFO (type) && !CLASSTYPE_USE_TEMPLATE (type)) { - /* If we are entering the scope of a template (not a + /* If we are entering the scope of a template declaration (not a specialization), we need to push all the using decls with dependent scope too. */ tree fields; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e3c766c482e..331c00d8cbc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-09-06 Nathan Sidwell + + PR c++/11794 + * g++.dg/parse/using3.C: New test. + 2003-09-06 Roger Sayle PR c++/11409 diff --git a/gcc/testsuite/g++.dg/parse/using3.C b/gcc/testsuite/g++.dg/parse/using3.C new file mode 100644 index 00000000000..c266b68eaf7 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/using3.C @@ -0,0 +1,22 @@ +// { dg-do compile } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 6 Sep 2003 +// Origin: stefaandr@hotmail.com + +// PR c++/11794. Using decl in nested classes of a template class + +template struct a +{ + struct a1: T + { + using T::aa; + + a1() { aa = 5; } + }; +}; +struct b { int aa; }; +template <> struct a::a1 { a1 () {} }; + +a::a1 a_b; +a::a1 a_i; -- 2.11.4.GIT