aboutsummaryrefslogtreecommitdiff
path: root/gdb/c-valprint.c
diff options
context:
space:
mode:
authorMartin Galvan <martin.galvan@tallertechnologies.com>2016-04-27 12:01:14 -0300
committerMartin Galvan <martin.galvan@tallertechnologies.com>2016-04-27 12:05:43 -0300
commit476350ba4800f1144b125f6511a5e25b223cc90b (patch)
tree8defec0d2e6829eb6fc3c1e32b3953fb0660c1ad /gdb/c-valprint.c
parent310cdbb65119c60959578460576ad316e3e2fb11 (diff)
downloadgdb-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.c17
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;
}