* value.c (value_primitive_field): Handle virtual base classes.

This commit is contained in:
Tom Tromey
2012-03-01 18:28:16 +00:00
parent b0db66a7b3
commit be3359361a
2 changed files with 13 additions and 2 deletions

View File

@@ -1,3 +1,7 @@
2012-03-01 Tom Tromey <tromey@redhat.com>
* value.c (value_primitive_field): Handle virtual base classes.
2012-03-01 Tom Tromey <tromey@redhat.com>
* gdbtypes.h (struct vbase): Remove.

View File

@@ -41,6 +41,7 @@
#include "python/python.h"
#include <ctype.h>
#include "tracepoint.h"
#include "cp-abi.h"
/* Prototypes for exported functions. */
@@ -2549,11 +2550,18 @@ value_primitive_field (struct value *arg1, int offset,
/* This field is actually a base subobject, so preserve the
entire object's contents for later references to virtual
bases, etc. */
int boffset;
/* Lazy register values with offsets are not supported. */
if (VALUE_LVAL (arg1) == lval_register && value_lazy (arg1))
value_fetch_lazy (arg1);
boffset = baseclass_offset (arg_type, fieldno,
value_contents (arg1),
value_embedded_offset (arg1),
value_address (arg1),
arg1);
if (value_lazy (arg1))
v = allocate_value_lazy (value_enclosing_type (arg1));
else
@@ -2564,8 +2572,7 @@ value_primitive_field (struct value *arg1, int offset,
}
v->type = type;
v->offset = value_offset (arg1);
v->embedded_offset = (offset + value_embedded_offset (arg1)
+ TYPE_FIELD_BITPOS (arg_type, fieldno) / 8);
v->embedded_offset = offset + value_embedded_offset (arg1) + boffset;
}
else
{