Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: gdb-patches@sourceware.org
Cc: Joel Brobecker <brobecker@adacore.com>
Subject: [commit/Ada] print null array pointer as `0x0' rather than `(null)'
Date: Wed, 29 Dec 2010 10:21:00 -0000	[thread overview]
Message-ID: <1293610216-9027-1-git-send-email-brobecker@adacore.com> (raw)

This is a minor followup on the previous patch.  Now that we are
correctly printing pointer-to-array types correctly as addresses
while arrays are correctly printed as arrays, we should also print
null pointer arrays as addresses...

Trying to print a variable defined as an access to an unconstrained
array:

       type String_Access is access String;
       S1 : String_Access;

If that variable is null, then GDB prints its value in an odd way:

    (gdb) print S1
    $1 = (string_bug.string_access) (null)
                                    ^^^^^^

This patch changes the debugger behavior to print the pointer using
the same output we'd use for any null pointer:

    (gdb) print S1
    $1 = (string_bug.string_access) 0x0

It also adds an assert, helping us verify an assumption.

gdb/ChangeLog:

        * ada-valprint.c (ada_val_print_1): Print null array pointers as
        `0x0' rather than `(null)'.  Add assertion.

gdb/testsuite/ChangeLog:

        * gdb.ada/arrayptr/foo.adb: Add new local variable Null_String.
        * gdb.ada/arrayptr.exp: Add test printing that new variable.

Tested on x86_64-linux.  Checked in.

---
 gdb/ChangeLog                          |    5 +++++
 gdb/ada-valprint.c                     |    3 ++-
 gdb/testsuite/ChangeLog                |    5 +++++
 gdb/testsuite/gdb.ada/arrayptr.exp     |    1 +
 gdb/testsuite/gdb.ada/arrayptr/foo.adb |    2 ++
 5 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e1f238e..7d3e3ce 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
 2010-12-29  Joel Brobecker  <brobecker@adacore.com>
 
+	* ada-valprint.c (ada_val_print_1): Print null array pointers as
+	`0x0' rather than `(null)'.  Add assertion.
+
+2010-12-29  Joel Brobecker  <brobecker@adacore.com>
+
 	* ada-lang.h (ada_coerce_to_simple_array): Add declaration.
 	* ada-lang.c (ada_typedef_target_type): New function.
 	(desc_base_type): Add handling of fat pointer typedefs.
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index b5d4b02..7c74838 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -690,7 +690,8 @@ ada_val_print_1 (struct type *type, const gdb_byte *valaddr0,
 	val = ada_coerce_to_simple_array (val);
       if (val == NULL)
 	{
-	  fprintf_filtered (stream, "(null)");
+	  gdb_assert (TYPE_CODE (type) == TYPE_CODE_TYPEDEF);
+	  fprintf_filtered (stream, "0x0");
 	  retn = 0;
 	}
       else
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 5124dbb..4580f60 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,10 @@
 2010-12-29  Joel Brobecker  <brobecker@adacore.com>
 
+	* gdb.ada/arrayptr/foo.adb: Add new local variable Null_String.
+	* gdb.ada/arrayptr.exp: Add test printing that new variable.
+
+2010-12-29  Joel Brobecker  <brobecker@adacore.com>
+
 	* gdb.ada/lang_switch.exp: Correct expected parameter value.
 
 2010-12-25  Andreas Schwab  <schwab@linux-m68k.org>
diff --git a/gdb/testsuite/gdb.ada/arrayptr.exp b/gdb/testsuite/gdb.ada/arrayptr.exp
index 0f450a0..43a04c1 100644
--- a/gdb/testsuite/gdb.ada/arrayptr.exp
+++ b/gdb/testsuite/gdb.ada/arrayptr.exp
@@ -44,3 +44,4 @@ gdb_test "print string_p" \
          "= \\(foo\\.string_access\\) 0x\[0-9a-zA-Z\]+" \
          "print string_p"
 
+gdb_test "print null_string" "= \\(foo\\.string_access\\) 0x0"
diff --git a/gdb/testsuite/gdb.ada/arrayptr/foo.adb b/gdb/testsuite/gdb.ada/arrayptr/foo.adb
index 8cedd87..c11ccfb 100644
--- a/gdb/testsuite/gdb.ada/arrayptr/foo.adb
+++ b/gdb/testsuite/gdb.ada/arrayptr/foo.adb
@@ -19,6 +19,8 @@ procedure Foo is
    type String_Access is access String;
 
    String_P : String_Access := new String'("Hello");
+   Null_String : String_Access := null;
 begin
    Do_Nothing (String_P'Address);  -- STOP
+   Do_Nothing (Null_String'Address);
 end Foo;
-- 
1.7.1


             reply	other threads:[~2010-12-29  8:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-29 10:21 Joel Brobecker [this message]
2010-12-30  1:54 ` Andreas Schwab
2010-12-30 10:59   ` Joel Brobecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1293610216-9027-1-git-send-email-brobecker@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox