From 8152c32042aa5376d1f994b571c2b66444b35416 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 18 Apr 2002 09:57:35 -0400 Subject: [PATCH] re PR c++/5658 (Regression on redefinition of a type in a derived class.) PR c++/5658 * search.c (setup_class_bindings): A class template qualifies as a type binding. From-SVN: r52469 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/search.c | 6 +++--- gcc/testsuite/g++.dg/template/inherit2.C | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/inherit2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b7e31a4fdc5..c5c097d224e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-04-18 Jason Merrill + + PR c++/5658 + * search.c (setup_class_bindings): A class template qualifies as a + type binding. + 2002-04-17 Jakub Jelinek PR c++/6316 diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 6e8ac11a038..779b37a6e33 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1839,7 +1839,7 @@ check_final_overrider (overrider, basefn) return 0; } - /* Check throw specifier is subset. */ + /* Check throw specifier is at least as strict. */ if (!comp_except_specs (base_throw, over_throw, 0)) { cp_error_at ("looser throw specifier for `%#F'", overrider); @@ -2390,14 +2390,14 @@ setup_class_bindings (name, type_binding_p) if (type_binding_p && (TREE_CODE (value_binding) == TYPE_DECL + || DECL_CLASS_TEMPLATE_P (value_binding) || (TREE_CODE (value_binding) == TREE_LIST && TREE_TYPE (value_binding) == error_mark_node && (TREE_CODE (TREE_VALUE (value_binding)) == TYPE_DECL)))) /* We found a type-binding, even when looking for a non-type binding. This means that we already processed this binding - above. */ - my_friendly_assert (type_binding_p, 19990401); + above. */; else if (value_binding) { if (TREE_CODE (value_binding) == TREE_LIST diff --git a/gcc/testsuite/g++.dg/template/inherit2.C b/gcc/testsuite/g++.dg/template/inherit2.C new file mode 100644 index 00000000000..0e2eba3239d --- /dev/null +++ b/gcc/testsuite/g++.dg/template/inherit2.C @@ -0,0 +1,19 @@ +// PR c++/5658 + +// Copyright (C) 2002 Free Software Foundation, Inc. +// Contributed by Theodore.Papadopoulo 11 Feb 2002 + +struct A { + typedef int iterator; +}; +template +struct B: public A { + template + struct iterator { + }; + B() { } +}; +int main() +{ + B a; +}; -- 2.30.2