mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-19 16:59:53 +08:00
* rtti.c (get_base_offset): Cope when vbase field is in a base.
From-SVN: r34619
This commit is contained in:
parent
21b9069137
commit
0f1e25b0d7
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user