+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.
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);
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
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));
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. */
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. */
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;