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.
This commit is contained in:
parent
310cdbb651
commit
476350ba48
@ -1,3 +1,8 @@
|
||||
2016-04-27 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.
|
||||
|
||||
2016-04-27 Andreas Arnez <arnez@linux.vnet.ibm.com>
|
||||
|
||||
* configure.ac: Enhance configure check for babeltrace to reject
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user