re PR c++/52685 (ICE in copy_binfo)
authorJason Merrill <jason@redhat.com>
Thu, 29 Mar 2012 15:55:01 +0000 (11:55 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 29 Mar 2012 15:55:01 +0000 (11:55 -0400)
PR c++/52685
* tree.c (copy_binfo): Handle BINFO_DEPENDENT_BASE_P.

From-SVN: r185968

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

index 4f9bae85c52e3c482e0e424377c952457145663a..af7fa2dbe78a8534026d65b18a6ee70075373db0 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-29  Jason Merrill  <jason@redhat.com>
+
+       PR c++/52685
+       * tree.c (copy_binfo): Handle BINFO_DEPENDENT_BASE_P.
+
 2012-03-29  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/52759
index 87e9be84ecc7de9fe283ebaf05e0474cb6cfbf44..30ad5e1b7be6563912c91cde5b8f272fc5460e9b 100644 (file)
@@ -1237,12 +1237,11 @@ copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
   TREE_CHAIN (*igo_prev) = new_binfo;
   *igo_prev = new_binfo;
 
-  if (binfo)
+  if (binfo && !BINFO_DEPENDENT_BASE_P (binfo))
     {
       int ix;
       tree base_binfo;
 
-      gcc_assert (!BINFO_DEPENDENT_BASE_P (binfo));
       gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
 
       BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
@@ -1255,8 +1254,6 @@ copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
       for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
        {
          tree new_base_binfo;
-
-         gcc_assert (!BINFO_DEPENDENT_BASE_P (base_binfo));
          new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
                                       t, igo_prev,
                                       BINFO_VIRTUAL_P (base_binfo));
index 00ec7bb855f6050c8a4e03069ff11f22c8d77535..d25b4d92ee83253d044fba9b782dd88c73f61ace 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-29  Jason Merrill  <jason@redhat.com>
+
+       PR c++/52685
+       * g++.dg/template/inherit8.C: New.
+
 2012-03-29  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/52759
diff --git a/gcc/testsuite/g++.dg/template/inherit8.C b/gcc/testsuite/g++.dg/template/inherit8.C
new file mode 100644 (file)
index 0000000..a9b2bdb
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/52685
+
+template <typename T>
+struct A
+{
+  template <typename U>
+  struct B : public A <B<U> >
+  {
+    struct C : public B<U>
+    {
+    };
+  };
+};