]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/23947 (segv in reshape_init_r())
authorJakub Jelinek <jakub@redhat.com>
Tue, 20 Sep 2005 15:40:57 +0000 (17:40 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 20 Sep 2005 15:40:57 +0000 (17:40 +0200)
PR c++/23947
* rtti.c (get_pseudo_ti_init): Recompute ti pointer after
get_tinfo_ptr calls.

* g++.dg/rtti/crash3.C: New test.

From-SVN: r104456

gcc/cp/ChangeLog
gcc/cp/rtti.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/rtti/crash3.C [new file with mode: 0644]

index 0680431367d03035cdb47d4acee84420a785c6b4..5bdf8bdbef97e5fcc4b295fa2da80df64dbaca04 100644 (file)
@@ -1,3 +1,9 @@
+2005-09-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/23947
+       * rtti.c (get_pseudo_ti_init): Recompute ti pointer after
+       get_tinfo_ptr calls.
+
 2005-09-16  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/23914
index 6d60d4c03598e27e2eff19ba07097b684a2752ea..8a3582de3de1f681f151d10b6f35d6f639200db5 100644 (file)
@@ -1020,7 +1020,9 @@ get_pseudo_ti_init (tree type, unsigned tk_index)
        tree base_binfo = BINFO_BASE_BINFO (TYPE_BINFO (type), 0);
        tree tinfo = get_tinfo_ptr (BINFO_TYPE (base_binfo));
        tree base_inits = tree_cons (NULL_TREE, tinfo, NULL_TREE);
-       
+
+       /* get_tinfo_ptr might have reallocated the tinfo_descs vector.  */
+       ti = VEC_index (tinfo_s, tinfo_descs, tk_index);
        return class_initializer (ti, type, base_inits);
       }
 
@@ -1079,6 +1081,9 @@ get_pseudo_ti_init (tree type, unsigned tk_index)
        base_inits = tree_cons (NULL_TREE,
                                build_int_cst (NULL_TREE, hint),
                                base_inits);
+
+       /* get_tinfo_ptr might have reallocated the tinfo_descs vector.  */
+       ti = VEC_index (tinfo_s, tinfo_descs, tk_index);
        return class_initializer (ti, type, base_inits);
       }
     }
index e4561999bd322661781f024f040749f918e15c91..8dd65bb36bbb60808be8bb35c9b8569ff8be2c49 100644 (file)
@@ -1,5 +1,8 @@
 2005-09-20  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c++/23947
+       * g++.dg/rtti/crash3.C: New test.
+
        PR tree-optimization/23818
        * gcc.dg/pr23818.c: New test.
 
diff --git a/gcc/testsuite/g++.dg/rtti/crash3.C b/gcc/testsuite/g++.dg/rtti/crash3.C
new file mode 100644 (file)
index 0000000..076e360
--- /dev/null
@@ -0,0 +1,10 @@
+// PR c++/23947
+// { dg-do compile }
+
+class A {};
+class B {};
+class C : public A, public B {};
+class D : public C {};
+void f () throw (D)
+{
+}