re PR c++/5658 (Regression on redefinition of a type in a derived class.)
authorJason Merrill <jason@redhat.com>
Thu, 18 Apr 2002 13:57:35 +0000 (09:57 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 18 Apr 2002 13:57:35 +0000 (09:57 -0400)
        PR c++/5658
        * search.c (setup_class_bindings): A class template qualifies as a
        type binding.

From-SVN: r52469

gcc/cp/ChangeLog
gcc/cp/search.c
gcc/testsuite/g++.dg/template/inherit2.C [new file with mode: 0644]

index b7e31a4fdc5b69a4d82ded9def2c2f5a7161411b..c5c097d224ea92c5f3364b78690324f3cc2c6a6d 100644 (file)
@@ -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
index 6e8ac11a038fd22e73f40119268d6679c9fa4d5a..779b37a6e331a9531e984397f712df3826125ad3 100644 (file)
@@ -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 (file)
index 0000000..0e2eba3
--- /dev/null
@@ -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; 
+};