Fix print of value type in a corner case of finish

When doing finish in a function, if gdb fails to return a value, gdb
also fails at printing the value type if this type is a struct.

For example :

(gdb) fin
....
Value returned has type: . Cannot determine contents

This patch fixes this by calling type_to_string to print the type
so that we can support these types.

This patch returns the following example output :

(gdb) fin
....
Value returned has type: struct test. Cannot determine contents

Also, this patch modifies structs.exp to check that we return the
correct type.

gdb/ChangeLog:
	* gdb/infcmd.c (print_return_value): use type_to_string to print type.

gdb/testsuite/ChangeLog:
	* gdb.base/structs.exp: Check for correct struct on finish.
This commit is contained in:
Antoine Tremblay 2015-02-25 11:00:01 -05:00
parent c8071705c6
commit 2f41223f62
4 changed files with 16 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2015-02-26 Antoine Tremblay <antoine.tremblay@ericsson.com>
* gdb/infcmd.c (print_return_value): use type_to_string to print type.
2015-02-26 Jan Kratochvil <jan.kratochvil@redhat.com>
* elfread.c (elf_read_minimal_symbols): Use bfd_alloc for

View File

@ -1607,10 +1607,16 @@ print_return_value (struct value *function, struct type *value_type)
}
else
{
struct cleanup *oldchain;
char *type_name;
type_name = type_to_string (value_type);
oldchain = make_cleanup (xfree, type_name);
ui_out_text (uiout, "Value returned has type: ");
ui_out_field_string (uiout, "return-type", TYPE_NAME (value_type));
ui_out_field_string (uiout, "return-type", type_name);
ui_out_text (uiout, ".");
ui_out_text (uiout, " Cannot determine contents\n");
do_cleanups (oldchain);
}
}

View File

@ -1,3 +1,7 @@
2015-02-26 Antoine Tremblay <antoine.tremblay@ericsson.com>
* gdb.base/structs.exp: Check for correct struct on finish.
2015-02-26 Yao Qi <yao.qi@linaro.org>
* lib/dwarf.exp (function_range): Adjust pattern when $func_length

View File

@ -428,7 +428,7 @@ proc test_struct_returns { n } {
-re "Value returned is .*${gdb_prompt} $" {
pass "${test}"
}
-re "Cannot determine contents.*${gdb_prompt} $" {
-re "Value returned has type: struct struct$n. Cannot determine contents.*${gdb_prompt} $" {
# Expected bad value. For the moment this is ok.
set finish_value_known 0
pass "${test}"