OSDN Git Service

* class.c (build_vcall_offset_vtbl_entries): Do not add vcall
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Nov 2006 02:19:02 +0000 (02:19 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 28 Nov 2006 02:19:02 +0000 (02:19 +0000)
entries for a primary construction virtual table.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119271 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 095c2fe..076abea 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 3e569f5..6b195fb 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: