diff options
author | Martin Galvan <martin.galvan@tallertechnologies.com> | 2016-04-27 12:01:14 -0300 |
---|---|---|
committer | Martin Galvan <martin.galvan@tallertechnologies.com> | 2016-04-27 12:05:43 -0300 |
commit | 476350ba4800f1144b125f6511a5e25b223cc90b (patch) | |
tree | 8defec0d2e6829eb6fc3c1e32b3953fb0660c1ad /gdb/c-valprint.c | |
parent | 310cdbb65119c60959578460576ad316e3e2fb11 (diff) | |
download | gdb-476350ba4800f1144b125f6511a5e25b223cc90b.zip gdb-476350ba4800f1144b125f6511a5e25b223cc90b.tar.gz gdb-476350ba4800f1144b125f6511a5e25b223cc90b.tar.bz2 |
c_value_print: Revert 'val' to a reference for TYPE_CODE_STRUCT
Currently c_value_print will turn struct reference values into pointers before
doing a set of RTTI checks. This was introduced as a fix to PR c++/15401.
If there's RTTI the pointer will be adjusted and converted back to a reference.
However, if there's no RTTI the value will still be treated as a pointer during
the remainder of the function.
This patch moves the conversion down so that it's always performed when needed.
Notice this currently has not user-visible effects, so can be seen as a small
code cleanup. However, it'll be necessary for the bug-fix for handling
synthetic C++ references. It causes no testsuite regressions.
gdb/ChangeLog:
2016-04-26 Martin Galvan <martin.galvan@tallertechnologies.com>
* c-valprint.c (c_value_print): Always convert val back to reference
type if we converted it to a pointer type.
Diffstat (limited to 'gdb/c-valprint.c')
-rw-r--r-- | gdb/c-valprint.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index 62552ec..e1da3d5 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -611,7 +611,7 @@ c_value_print (struct value *val, struct ui_file *stream, fprintf_filtered (stream, "("); if (value_entirely_available (val)) - { + { real_type = value_rtti_indirect_type (val, &full, &top, &using_enc); if (real_type) @@ -623,18 +623,19 @@ c_value_print (struct value *val, struct ui_file *stream, val = value_from_pointer (real_type, value_as_address (val) - top); - if (is_ref) - { - val = value_ref (value_ind (val)); - type = value_type (val); - } - /* Note: When we look up RTTI entries, we don't get any information on const or volatile attributes. */ } } - type_print (type, "", stream, -1); + + if (is_ref) + { + val = value_ref (value_ind (val)); + type = value_type (val); + } + + type_print (type, "", stream, -1); fprintf_filtered (stream, ") "); val_type = type; } |