class.c (copy_virtuals): Remove.
authorNathan Sidwell <nathan@codesourcery.com>
Thu, 16 Sep 2004 15:21:41 +0000 (15:21 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 16 Sep 2004 15:21:41 +0000 (15:21 +0000)
* class.c (copy_virtuals): Remove.
(build_primary_vtable): Use copy_list directly.
(build_secondary_vtable): Likewise.
(update_vtable_entry_for_fn): Clear BV_CALL_INDEX here.
(create_vtable_ptr): Likewise.

From-SVN: r87604

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

index bdca9bc9e2624e48566caa5249369b7e97eabfc4..6c46adc27891fea878514d7a08b5a3b606617c4b 100644 (file)
@@ -1,3 +1,11 @@
+2004-09-16  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * class.c (copy_virtuals): Remove.
+       (build_primary_vtable): Use copy_list directly.
+       (build_secondary_vtable): Likewise.
+       (update_vtable_entry_for_fn): Clear BV_CALL_INDEX here.
+       (create_vtable_ptr): Likewise.
+
 2004-09-16  Kazu Hirata  <kazu@cs.umass.edu>
 
        * search.c: Follow spelling conventions.
index a92bb8e81f22b9e15e8e55a5be83b80e106030c9..c16b872a9d83c6975864e81bb3181481ef1c9736 100644 (file)
@@ -183,7 +183,6 @@ static void build_vcall_and_vbase_vtbl_entries (tree,
 static void clone_constructors_and_destructors (tree);
 static tree build_clone (tree, tree);
 static void update_vtable_entry_for_fn (tree, tree, tree, tree *, unsigned);
-static tree copy_virtuals (tree);
 static void build_ctor_vtbl_group (tree, tree);
 static void build_vtt (tree);
 static tree binfo_ctor_vtable (tree);
@@ -709,22 +708,6 @@ get_vtable_decl (tree type, int complete)
   return decl;
 }
 
-/* Returns a copy of the BINFO_VIRTUALS list in BINFO.  The
-   BV_VCALL_INDEX for each entry is cleared.  */
-
-static tree
-copy_virtuals (tree binfo)
-{
-  tree copies;
-  tree t;
-
-  copies = copy_list (BINFO_VIRTUALS (binfo));
-  for (t = copies; t; t = TREE_CHAIN (t))
-    BV_VCALL_INDEX (t) = NULL_TREE;
-
-  return copies;
-}
-
 /* Build the primary virtual function table for TYPE.  If BINFO is
    non-NULL, build the vtable starting with the initial approximation
    that it is the same as the one which is the head of the association
@@ -746,7 +729,7 @@ build_primary_vtable (tree binfo, tree type)
           no need to do it again.  */
        return 0;
       
-      virtuals = copy_virtuals (binfo);
+      virtuals = copy_list (BINFO_VIRTUALS (binfo));
       TREE_TYPE (decl) = TREE_TYPE (get_vtbl_decl_for_binfo (binfo));
       DECL_SIZE (decl) = TYPE_SIZE (TREE_TYPE (decl));
       DECL_SIZE_UNIT (decl) = TYPE_SIZE_UNIT (TREE_TYPE (decl));
@@ -797,7 +780,7 @@ build_secondary_vtable (tree binfo)
   SET_BINFO_NEW_VTABLE_MARKED (binfo);
   
   /* Make fresh virtual list, so we can smash it later.  */
-  BINFO_VIRTUALS (binfo) = copy_virtuals (binfo);
+  BINFO_VIRTUALS (binfo) = copy_list (BINFO_VIRTUALS (binfo));
 
   /* Secondary vtables are laid out as part of the same structure as
      the primary vtable.  */
@@ -2237,6 +2220,8 @@ update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals,
   if (virtual_base)
     BV_VCALL_INDEX (*virtuals) 
       = get_vcall_index (overrider_target, BINFO_TYPE (virtual_base));
+  else
+    BV_VCALL_INDEX (*virtuals) = NULL_TREE;
 }
 
 /* Called from modify_all_vtables via dfs_walk.  */
@@ -4199,6 +4184,7 @@ create_vtable_ptr (tree t, tree* virtuals_p)
        
        BV_FN (new_virtual) = fn;
        BV_DELTA (new_virtual) = integer_zero_node;
+       BV_VCALL_INDEX (new_virtual) = NULL_TREE;
 
        TREE_CHAIN (new_virtual) = *virtuals_p;
        *virtuals_p = new_virtual;