From: Joel Brobecker Date: Tue, 1 Jan 2008 11:39:07 +0000 (+0000) Subject: * ada-valprint.c (ada_val_print_1) [TYPE_CODE_REF]: Ignore deref_ref X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=969a136098c462168631b0f20bbe5e1fcb8176bb;p=binutils-gdb.git * ada-valprint.c (ada_val_print_1) [TYPE_CODE_REF]: Ignore deref_ref and always print the dereferenced value. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 73d984ed654..55b2fe29c15 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-01-01 Joel Brobecker + + * ada-valprint.c (ada_val_print_1) [TYPE_CODE_REF]: Ignore deref_ref + and always print the dereferenced value. + 2008-01-01 Joel Brobecker * ada-lang.c (ada_evaluate_subexp, case BINOP_SUB): Add handling diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index b96baf08954..d2def87ae2a 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);