* rtti.c (get_base_offset): Cope when vbase field is in a base.

From-SVN: r34619
This commit is contained in:
Nathan Sidwell 2000-06-20 16:13:33 +00:00 committed by Nathan Sidwell
parent 21b9069137
commit 0f1e25b0d7
2 changed files with 21 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2000-06-20 Nathan Sidwell <nathan@codesourcery.com>
* rtti.c (get_base_offset): Cope when vbase field is in a base.
2000-06-20 Nathan Sidwell <nathan@codesourcery.com>
* call.c (build_conditional_expr): Use VOID_TYPE_P.

View File

@ -549,10 +549,25 @@ get_base_offset (binfo, parent)
else if (! vbase_offsets_in_vtable_p ())
{
const char *name;
tree result;
tree field;
FORMAT_VBASE_NAME (name, BINFO_TYPE (binfo));
return byte_position (lookup_field (parent, get_identifier (name),
0, 0));
field = lookup_field (parent, get_identifier (name), 0, 0);
result = byte_position (field);
if (DECL_CONTEXT (field) != parent)
{
/* The vbase pointer might be in a non-virtual base of PARENT.
* Adjust for the offset of that base in PARENT. */
tree path;
get_base_distance (DECL_CONTEXT (field), parent, -1, &path);
result = build (PLUS_EXPR, TREE_TYPE (result),
result, BINFO_OFFSET (path));
result = fold (result);
}
return result;
}
else
/* Under the new ABI, we store the vtable offset at which