]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
class.c (build_vcall_offset_vtbl_entries): Do not add vcall entries for a primary...
authorMark Mitchell <mark@codesourcery.com>
Tue, 28 Nov 2006 02:19:02 +0000 (02:19 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 28 Nov 2006 02:19:02 +0000 (02:19 +0000)
* class.c (build_vcall_offset_vtbl_entries): Do not add vcall
entries for a primary construction virtual table.

From-SVN: r119271

gcc/cp/ChangeLog
gcc/cp/class.c

index 095c2fe55270147fd7db311ae2a05a8f87a61b0b..076abeaf30497c87c69c6e00370587f770c333d6 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-27  Mark Mitchell  <mark@codesourcery.com>
+
+       * class.c (build_vcall_offset_vtbl_entries): Do not add vcall
+       entries for a primary construction virtual table.
+
 2006-11-26  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/29886
index 3e569f5777db501386511932bd2e1eeffbbe6e42..6b195fb1f2519ea4eea8512eb2405b829e96db61 100644 (file)
@@ -7449,7 +7449,14 @@ build_vcall_offset_vtbl_entries (tree binfo, vtbl_init_data* vid)
   /* We only need these entries if this base is a virtual base.  We
      compute the indices -- but do not add to the vtable -- when
      building the main vtable for a class.  */
-  if (BINFO_VIRTUAL_P (binfo) || binfo == TYPE_BINFO (vid->derived))
+  if (binfo == TYPE_BINFO (vid->derived)
+      || (BINFO_VIRTUAL_P (binfo) 
+         /* If BINFO is RTTI_BINFO, then (since BINFO does not
+            correspond to VID->DERIVED), we are building a primary
+            construction virtual table.  Since this is a primary
+            virtual table, we do not need the vcall offsets for
+            BINFO.  */
+         && binfo != vid->rtti_binfo))
     {
       /* We need a vcall offset for each of the virtual functions in this
         vtable.  For example: