diff options
Diffstat (limited to 'gdb/c-valprint.c')
-rw-r--r-- | gdb/c-valprint.c | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 138aca6..8e4f932 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -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; |