From e1c34c5d94deefd6bc672d0058df0bb1513888b6 Mon Sep 17 00:00:00 2001 From: Pierre Muller Date: Tue, 4 May 2010 06:48:27 +0000 Subject: [PATCH] PR exp/11349. * printcmd.c (x_command): Only dereference once implicitly for TYPE_CODE_REF. testsuite dir: PR exp/11349. * testsuite/gdb.cp/ref-types.exp: Add test to examine use a reference local variable. --- gdb/ChangeLog | 6 ++++++ gdb/printcmd.c | 2 +- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.cp/ref-types.exp | 5 +++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4aa6df4..972a64d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-05-04 Pierre Muller + + PR exp/11349. + * printcmd.c (x_command): Only dereference once implicitly for + TYPE_CODE_REF. + 2010-05-03 Doug Evans * event-loop.c (gdb_timer): Delete unused global. diff --git a/gdb/printcmd.c b/gdb/printcmd.c index 735b043..16ea2a6 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -1420,7 +1420,7 @@ x_command (char *exp, int from_tty) old_chain = make_cleanup (free_current_contents, &expr); val = evaluate_expression (expr); if (TYPE_CODE (value_type (val)) == TYPE_CODE_REF) - val = value_ind (val); + val = coerce_ref (val); /* In rvalue contexts, such as this, functions are coerced into pointers to functions. This makes "x/i main" work. */ if (/* last_format == 'i' && */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 1918726..f8aaf35 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-05-04 Pierre Muller + + PR exp/11349. + * testsuite/gdb.cp/ref-types.exp: Add test to examine + use a reference local variable. + 2010-05-02 Jan Kratochvil * gdb.base/break-interp.exp: Remove $exec.debug safety removal. diff --git a/gdb/testsuite/gdb.cp/ref-types.exp b/gdb/testsuite/gdb.cp/ref-types.exp index 1308433..977eaa4 100644 --- a/gdb/testsuite/gdb.cp/ref-types.exp +++ b/gdb/testsuite/gdb.cp/ref-types.exp @@ -200,6 +200,11 @@ gdb_expect { timeout { fail "(timeout) print value of *rps" } } +# GDB had a bug about dereferencing a pointer type +# that would lead to wrong results +# if we try to examine memory at pointer value. + +gdb_test "x /hd rps" "$hex:\[ \t\]*-1" "examine value at rps" send_gdb "ptype rps\n" gdb_expect { -- 2.7.4