Fix PR gdb/778
* gdbtypes.c (fill_in_vptr_fieldno): Call check_typedef before recursing. * gnu-v3-abi.c (gnuv3_virtual_fn_field): Check return value of fill_in_vptr_fieldno.
This commit is contained in:
parent
ad050da3e6
commit
cef4f5dd72
3 changed files with 16 additions and 6 deletions
|
@ -1,3 +1,11 @@
|
|||
2002-10-02 Daniel Jacobowitz <drow@mvista.com>
|
||||
|
||||
Fix PR gdb/778
|
||||
* gdbtypes.c (fill_in_vptr_fieldno): Call check_typedef
|
||||
before recursing.
|
||||
* gnu-v3-abi.c (gnuv3_virtual_fn_field): Check return value
|
||||
of fill_in_vptr_fieldno.
|
||||
|
||||
2002-10-02 Elena Zannoni <ezannoni@redhat.com>
|
||||
|
||||
* inferior.h (registers_info, stepi_command, nexti_command,
|
||||
|
|
|
@ -1276,13 +1276,12 @@ fill_in_vptr_fieldno (struct type *type)
|
|||
virtual (and hence we cannot share the table pointer). */
|
||||
for (i = 0; i < TYPE_N_BASECLASSES (type); i++)
|
||||
{
|
||||
fill_in_vptr_fieldno (TYPE_BASECLASS (type, i));
|
||||
if (TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, i)) >= 0)
|
||||
struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
|
||||
fill_in_vptr_fieldno (baseclass);
|
||||
if (TYPE_VPTR_FIELDNO (baseclass) >= 0)
|
||||
{
|
||||
TYPE_VPTR_FIELDNO (type)
|
||||
= TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, i));
|
||||
TYPE_VPTR_BASETYPE (type)
|
||||
= TYPE_VPTR_BASETYPE (TYPE_BASECLASS (type, i));
|
||||
TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (baseclass);
|
||||
TYPE_VPTR_BASETYPE (type) = TYPE_VPTR_BASETYPE (baseclass);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -324,6 +324,9 @@ gnuv3_virtual_fn_field (struct value **value_p,
|
|||
type now. */
|
||||
if (TYPE_VPTR_FIELDNO (vfn_base) < 0)
|
||||
fill_in_vptr_fieldno (vfn_base);
|
||||
if (TYPE_VPTR_FIELDNO (vfn_base) < 0)
|
||||
error ("Could not find virtual table pointer for class \"%s\".",
|
||||
TYPE_TAG_NAME (vfn_base) ? TYPE_TAG_NAME (vfn_base) : "<unknown>");
|
||||
|
||||
/* Now that we know which base class is defining our virtual
|
||||
function, cast our value to that baseclass. This takes care of
|
||||
|
|
Loading…
Reference in a new issue