cp-tree.h (skip_rtti_stuff): Adjust prototype.

* cp-tree.h (skip_rtti_stuff): Adjust prototype.
	* class.c (skip_rtti_stuff): Reorganize parameters and return value.
	(modify_one_vtable): Adjust.
	(fixup_vtable_deltas1): Likewise.
	(override_one_vtable): Likewise.
	* search.c (get_abstract_virtuals_1): Likewise.
	(get_pure_virtuals): Likewise.
	(expand_upcast_fixups): Likewise.
	* tree.c (debug_binfo): Likewise.

From-SVN: r31163
This commit is contained in:
Mark Mitchell 2000-01-02 04:04:05 +00:00 committed by Mark Mitchell
parent 5e1677bcb0
commit 07b7a812fd
5 changed files with 48 additions and 31 deletions

View File

@ -1,5 +1,15 @@
2000-01-01 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (skip_rtti_stuff): Adjust prototype.
* class.c (skip_rtti_stuff): Reorganize parameters and return value.
(modify_one_vtable): Adjust.
(fixup_vtable_deltas1): Likewise.
(override_one_vtable): Likewise.
* search.c (get_abstract_virtuals_1): Likewise.
(get_pure_virtuals): Likewise.
(expand_upcast_fixups): Likewise.
* tree.c (debug_binfo): Likewise.
* class.c (build_vtable): Don't return a value. Don't rebuild
vtables for bases that have already been handled.
(prepare_fresh_vtable): Don't rebuild vtables for bases that have

View File

@ -2384,39 +2384,48 @@ get_class_offset (context, t, binfo, fndecl)
return offset;
}
/* Skip RTTI information at the front of the virtual list. */
/* Return the BINFO_VIRTUALS list for BINFO, without the RTTI stuff at
the front. If non-NULL, N is set to the number of entries
skipped. */
unsigned HOST_WIDE_INT
skip_rtti_stuff (virtuals, t)
tree *virtuals, t;
tree
skip_rtti_stuff (binfo, t, n)
tree binfo;
tree t;
unsigned HOST_WIDE_INT *n;
{
int n;
tree virtuals;
if (CLASSTYPE_COM_INTERFACE (t))
return 0;
n = 0;
if (*virtuals)
if (n)
*n = 0;
virtuals = BINFO_VIRTUALS (binfo);
if (virtuals)
{
/* We always reserve a slot for the offset/tdesc entry. */
++n;
*virtuals = TREE_CHAIN (*virtuals);
if (n)
++*n;
virtuals = TREE_CHAIN (virtuals);
}
if (flag_vtable_thunks && *virtuals)
if (flag_vtable_thunks && virtuals)
{
/* The second slot is reserved for the tdesc pointer when thunks
are used. */
++n;
*virtuals = TREE_CHAIN (*virtuals);
if (n)
++*n;
virtuals = TREE_CHAIN (virtuals);
}
return n;
return virtuals;
}
static void
modify_one_vtable (binfo, t, fndecl)
tree binfo, t, fndecl;
{
tree virtuals = BINFO_VIRTUALS (binfo);
tree virtuals;
unsigned HOST_WIDE_INT n;
/* update rtti entry */
@ -2430,7 +2439,7 @@ modify_one_vtable (binfo, t, fndecl)
if (fndecl == NULL_TREE)
return;
n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), &n);
while (virtuals)
{
@ -2519,10 +2528,10 @@ static void
fixup_vtable_deltas1 (binfo, t)
tree binfo, t;
{
tree virtuals = BINFO_VIRTUALS (binfo);
tree virtuals;
unsigned HOST_WIDE_INT n;
n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), &n);
while (virtuals)
{
@ -2677,8 +2686,8 @@ static void
override_one_vtable (binfo, old, t)
tree binfo, old, t;
{
tree virtuals = BINFO_VIRTUALS (binfo);
tree old_virtuals = BINFO_VIRTUALS (old);
tree virtuals;
tree old_virtuals;
enum { REUSE_NEW, REUSE_OLD, UNDECIDED, NEITHER } choose = UNDECIDED;
/* If we have already committed to modifying it, then don't try and
@ -2686,8 +2695,8 @@ override_one_vtable (binfo, old, t)
if (BINFO_NEW_VTABLE_MARKED (binfo))
choose = NEITHER;
skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
skip_rtti_stuff (&old_virtuals, BINFO_TYPE (binfo));
virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), NULL);
old_virtuals = skip_rtti_stuff (old, BINFO_TYPE (binfo), NULL);
while (virtuals)
{

View File

@ -3394,7 +3394,7 @@ extern void push_lang_context PROTO((tree));
extern void pop_lang_context PROTO((void));
extern tree instantiate_type PROTO((tree, tree, int));
extern void print_class_statistics PROTO((void));
extern unsigned HOST_WIDE_INT skip_rtti_stuff PROTO((tree *, tree));
extern tree skip_rtti_stuff PROTO((tree, tree, unsigned HOST_WIDE_INT *));
extern void build_self_reference PROTO((void));
extern void warn_hidden PROTO((tree));
extern tree get_enclosing_class PROTO((tree));

View File

@ -2129,9 +2129,9 @@ get_abstract_virtuals_1 (binfo, do_self, abstract_virtuals)
/* Should we use something besides CLASSTYPE_VFIELDS? */
if (do_self && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo)))
{
tree virtuals = BINFO_VIRTUALS (binfo);
tree virtuals;
skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), NULL);
while (virtuals)
{
@ -2160,9 +2160,9 @@ get_pure_virtuals (type)
for (vbases = CLASSTYPE_VBASECLASSES (type); vbases; vbases = TREE_CHAIN (vbases))
{
tree virtuals = BINFO_VIRTUALS (vbases);
tree virtuals;
skip_rtti_stuff (&virtuals, BINFO_TYPE (vbases));
virtuals = skip_rtti_stuff (vbases, BINFO_TYPE (vbases), NULL);
while (virtuals)
{
@ -2598,7 +2598,7 @@ expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t,
vbase_offsets)
tree binfo, addr, orig_addr, vbase, vbase_addr, t, *vbase_offsets;
{
tree virtuals = BINFO_VIRTUALS (binfo);
tree virtuals;
tree vc;
tree delta;
unsigned HOST_WIDE_INT n;
@ -2613,7 +2613,7 @@ expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t,
*vbase_offsets = delta;
}
n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), &n);
while (virtuals)
{

View File

@ -1165,9 +1165,7 @@ debug_binfo (elem)
else
fprintf (stderr, "no vtable decl yet\n");
fprintf (stderr, "virtuals:\n");
virtuals = BINFO_VIRTUALS (elem);
n = skip_rtti_stuff (&virtuals, BINFO_TYPE (elem));
virtuals = skip_rtti_stuff (elem, BINFO_TYPE (elem), &n);
while (virtuals)
{