diff options
author | Jason Merrill <jason@redhat.com> | 2002-04-18 09:57:35 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2002-04-18 09:57:35 -0400 |
commit | 8152c32042aa5376d1f994b571c2b66444b35416 (patch) | |
tree | c7c4ac2c47c31bad7bac45dc8ac89ff36f5c1af2 /gcc | |
parent | 2e676d7878ee6adf8b91dcb45462ee1459f6e2f9 (diff) | |
download | gcc-8152c32042aa5376d1f994b571c2b66444b35416.zip gcc-8152c32042aa5376d1f994b571c2b66444b35416.tar.gz gcc-8152c32042aa5376d1f994b571c2b66444b35416.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/search.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/inherit2.C | 19 |
3 files changed, 28 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b7e31a4..c5c097d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2002-04-18 Jason Merrill <jason@redhat.com> + + PR c++/5658 + * search.c (setup_class_bindings): A class template qualifies as a + type binding. + 2002-04-17 Jakub Jelinek <jakub@redhat.com> PR c++/6316 diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 6e8ac11..779b37a 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 0000000..0e2eba3 --- /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 <Theodore.Papadopoulo@sophia.inria.fr> + +struct A { + typedef int iterator; +}; +template <typename T> +struct B: public A { + template <typename U> + struct iterator { + }; + B() { } +}; +int main() +{ + B<int> a; +}; |