This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH v2] Fix print of value type in a corner case of finish
- From: Antoine Tremblay <antoine dot tremblay at ericsson dot com>
- To: <gdb-patches at sourceware dot org>
- Cc: <palves at redhat dot com>, Antoine Tremblay <antoine dot tremblay at ericsson dot com>
- Date: Thu, 26 Feb 2015 10:45:59 -0500
- Subject: [PATCH v2] Fix print of value type in a corner case of finish
- Authentication-results: sourceware.org; auth=none
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.
---
gdb/infcmd.c | 8 +++++++-
gdb/testsuite/gdb.base/structs.exp | 2 +-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 9a1fb8d..3737b8f 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -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);
}
}
diff --git a/gdb/testsuite/gdb.base/structs.exp b/gdb/testsuite/gdb.base/structs.exp
index 927e3b8..5d94a41 100644
--- a/gdb/testsuite/gdb.base/structs.exp
+++ b/gdb/testsuite/gdb.base/structs.exp
@@ -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}"
--
1.7.9.5