mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-29 10:30:46 +00:00
gdb/testsuite/
* gdb.trace/unavailable.cc (struct Virtual): New. (virtualp): New global pointer. * gdb.trace/unavailable.exp (gdb_collect_globals_test): Test printing a pointer to an object whose type has a vtable, with print object on. gdb/ * value.h (value_entirely_available): Declare. * value.c (value_entirely_available): New function. * c-valprint.c (c_value_print): Don't try fetching the pointer's real type if the pointer is unavailable.
This commit is contained in:
@@ -686,29 +686,33 @@ c_value_print (struct value *val, struct ui_file *stream,
|
||||
}
|
||||
/* Pointer to class, check real type of object. */
|
||||
fprintf_filtered (stream, "(");
|
||||
real_type = value_rtti_target_type (val, &full,
|
||||
&top, &using_enc);
|
||||
if (real_type)
|
||||
{
|
||||
/* RTTI entry found. */
|
||||
if (TYPE_CODE (type) == TYPE_CODE_PTR)
|
||||
{
|
||||
/* Create a pointer type pointing to the real
|
||||
type. */
|
||||
type = lookup_pointer_type (real_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Create a reference type referencing the real
|
||||
type. */
|
||||
type = lookup_reference_type (real_type);
|
||||
}
|
||||
/* JYG: Need to adjust pointer value. */
|
||||
val = value_from_pointer (type, value_as_address (val) - top);
|
||||
|
||||
/* Note: When we look up RTTI entries, we don't get any
|
||||
information on const or volatile attributes. */
|
||||
}
|
||||
if (value_entirely_available (val))
|
||||
{
|
||||
real_type = value_rtti_target_type (val, &full, &top, &using_enc);
|
||||
if (real_type)
|
||||
{
|
||||
/* RTTI entry found. */
|
||||
if (TYPE_CODE (type) == TYPE_CODE_PTR)
|
||||
{
|
||||
/* Create a pointer type pointing to the real
|
||||
type. */
|
||||
type = lookup_pointer_type (real_type);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Create a reference type referencing the real
|
||||
type. */
|
||||
type = lookup_reference_type (real_type);
|
||||
}
|
||||
/* Need to adjust pointer value. */
|
||||
val = value_from_pointer (type, value_as_address (val) - top);
|
||||
|
||||
/* Note: When we look up RTTI entries, we don't get
|
||||
any information on const or volatile
|
||||
attributes. */
|
||||
}
|
||||
}
|
||||
type_print (type, "", stream, -1);
|
||||
fprintf_filtered (stream, ") ");
|
||||
val_type = type;
|
||||
|
||||
Reference in New Issue
Block a user