diff options
author | Joel Brobecker <brobecker@gnat.com> | 2008-01-01 11:39:07 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2008-01-01 11:39:07 +0000 |
commit | 969a136098c462168631b0f20bbe5e1fcb8176bb (patch) | |
tree | 318fdae7f55dd23c467d1eb36babd1e2cb5585ed | |
parent | b7789565fa3afa8b4da2b2c26ac5670f5a95e2dd (diff) | |
download | gdb-969a136098c462168631b0f20bbe5e1fcb8176bb.zip gdb-969a136098c462168631b0f20bbe5e1fcb8176bb.tar.gz gdb-969a136098c462168631b0f20bbe5e1fcb8176bb.tar.bz2 |
* ada-valprint.c (ada_val_print_1) [TYPE_CODE_REF]: Ignore deref_ref
and always print the dereferenced value.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/ada-valprint.c | 53 |
2 files changed, 33 insertions, 25 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 73d984e..55b2fe2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2008-01-01 Joel Brobecker <brobecker@adacore.com> + * ada-valprint.c (ada_val_print_1) [TYPE_CODE_REF]: Ignore deref_ref + and always print the dereferenced value. + +2008-01-01 Joel Brobecker <brobecker@adacore.com> + * ada-lang.c (ada_evaluate_subexp, case BINOP_SUB): Add handling of the case where the first argument is a reference. (ada_evaluate_subexp, case BINOP_ADD): Likewise. diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index b96baf0..d2def87 100644 --- a/gdb/ada-valprint.c +++ b/gdb/ada-valprint.c @@ -855,32 +855,35 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0, return len; case TYPE_CODE_REF: + /* For references, the debugger is expected to print the value as + an address if DEREF_REF is null. But printing an address in place + of the object value would be confusing to an Ada programmer. + So, for Ada values, we print the actual dereferenced value + regardless. */ elttype = check_typedef (TYPE_TARGET_TYPE (type)); - /* De-reference the reference */ - if (deref_ref) - { - if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF) - { - LONGEST deref_val_int = (LONGEST) - unpack_pointer (lookup_pointer_type (builtin_type_void), - valaddr); - if (deref_val_int != 0) - { - struct value *deref_val = - ada_value_ind (value_from_longest - (lookup_pointer_type (elttype), - deref_val_int)); - val_print (value_type (deref_val), - value_contents (deref_val), 0, - VALUE_ADDRESS (deref_val), stream, format, - deref_ref, recurse + 1, pretty); - } - else - fputs_filtered ("(null)", stream); - } - else - fputs_filtered ("???", stream); - } + + if (TYPE_CODE (elttype) != TYPE_CODE_UNDEF) + { + LONGEST deref_val_int = (LONGEST) + unpack_pointer (lookup_pointer_type (builtin_type_void), + valaddr); + if (deref_val_int != 0) + { + struct value *deref_val = + ada_value_ind (value_from_longest + (lookup_pointer_type (elttype), + deref_val_int)); + val_print (value_type (deref_val), + value_contents (deref_val), 0, + VALUE_ADDRESS (deref_val), stream, format, + deref_ref, recurse + 1, pretty); + } + else + fputs_filtered ("(null)", stream); + } + else + fputs_filtered ("???", stream); + break; } gdb_flush (stream); |