Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH v2] Fix print of value type in a corner case of finish
@ 2015-02-26 15:46 Antoine Tremblay
  2015-02-26 15:53 ` Pedro Alves
  0 siblings, 1 reply; 2+ messages in thread
From: Antoine Tremblay @ 2015-02-26 15:46 UTC (permalink / raw)
  To: gdb-patches; +Cc: palves, Antoine Tremblay

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


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] Fix print of value type in a corner case of finish
  2015-02-26 15:46 [PATCH v2] Fix print of value type in a corner case of finish Antoine Tremblay
@ 2015-02-26 15:53 ` Pedro Alves
  0 siblings, 0 replies; 2+ messages in thread
From: Pedro Alves @ 2015-02-26 15:53 UTC (permalink / raw)
  To: Antoine Tremblay, gdb-patches

On 02/26/2015 03:45 PM, Antoine Tremblay wrote:
> 
> 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.

OK.

Thanks,
Pedro Alves


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-02-26 15:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-26 15:46 [PATCH v2] Fix print of value type in a corner case of finish Antoine Tremblay
2015-02-26 15:53 ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox