From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 742 invoked by alias); 29 Dec 2010 08:10:34 -0000 Received: (qmail 730 invoked by uid 22791); 29 Dec 2010 08:10:33 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 29 Dec 2010 08:10:26 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 813CF2BABB7; Wed, 29 Dec 2010 03:10:24 -0500 (EST) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id FgGeFrOXhS8q; Wed, 29 Dec 2010 03:10:24 -0500 (EST) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id EED532BAB19; Wed, 29 Dec 2010 03:10:23 -0500 (EST) Received: by joel.gnat.com (Postfix, from userid 1000) id 1DC02145870; Wed, 29 Dec 2010 12:10:17 +0400 (RET) From: Joel Brobecker To: gdb-patches@sourceware.org Cc: Joel Brobecker Subject: [commit/Ada] print null array pointer as `0x0' rather than `(null)' Date: Wed, 29 Dec 2010 10:21:00 -0000 Message-Id: <1293610216-9027-1-git-send-email-brobecker@adacore.com> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-12/txt/msg00540.txt.bz2 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 + * ada-valprint.c (ada_val_print_1): Print null array pointers as + `0x0' rather than `(null)'. Add assertion. + +2010-12-29 Joel Brobecker + * 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 + * 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 + * gdb.ada/lang_switch.exp: Correct expected parameter value. 2010-12-25 Andreas Schwab 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