Fix print of value type in a corner case of finish
authorAntoine Tremblay <antoine.tremblay@ericsson.com>
Wed, 25 Feb 2015 16:00:01 +0000 (11:00 -0500)
committerAntoine Tremblay <antoine.tremblay@ericsson.com>
Thu, 26 Feb 2015 15:58:00 +0000 (10:58 -0500)
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/ChangeLog
gdb/infcmd.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/structs.exp

index 2a2daddf7fdd59cf9fae6ad5b51ff2e888bb44f4..5c4138ef7578a36165c6a265635cb7409ee2f17a 100644 (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
index 9a1fb8d71307b698c56a525eb1267a38e833d978..3737b8f6f1cfed1892a0c029317c2ef4ee2f7a6e 100644 (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);
     }
 }
 
index d06b5e5bc5ac2887ae64499dbebfa439dffed53c..b578053825391051f0c46b01b3242b6430c9b50f 100644 (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
index 927e3b8a8773bae96de99b9a95438220e2a1e3fc..5d94a41c5af2150f32852f6435b09916b26f8c37 100644 (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}"