Commit 0f1e25b0 by Nathan Sidwell Committed by Nathan Sidwell

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

From-SVN: r34619
parent 21b90691
2000-06-20 Nathan Sidwell <nathan@codesourcery.com> 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. * call.c (build_conditional_expr): Use VOID_TYPE_P.
* cvt.c (cp_convert_to_pointer): Likewise. * cvt.c (cp_convert_to_pointer): Likewise.
(convert_to_void): Likewise. (convert_to_void): Likewise.
......
...@@ -549,10 +549,25 @@ get_base_offset (binfo, parent) ...@@ -549,10 +549,25 @@ get_base_offset (binfo, parent)
else if (! vbase_offsets_in_vtable_p ()) else if (! vbase_offsets_in_vtable_p ())
{ {
const char *name; const char *name;
tree result;
tree field;
FORMAT_VBASE_NAME (name, BINFO_TYPE (binfo)); FORMAT_VBASE_NAME (name, BINFO_TYPE (binfo));
return byte_position (lookup_field (parent, get_identifier (name), field = lookup_field (parent, get_identifier (name), 0, 0);
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 else
/* Under the new ABI, we store the vtable offset at which /* Under the new ABI, we store the vtable offset at which
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment