[Ada] print null array pointer as `0x0' rather than `(null)'
authorJoel Brobecker <brobecker@gnat.com>
Wed, 29 Dec 2010 08:02:59 +0000 (08:02 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Wed, 29 Dec 2010 08:02:59 +0000 (08:02 +0000)
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.

gdb/ChangeLog
gdb/ada-valprint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.ada/arrayptr.exp
gdb/testsuite/gdb.ada/arrayptr/foo.adb

index e1f238e4c64cd12204c75a2af5faeff1a3e971da..7d3e3ce0f86ae2c19783f3786d43509dbd64d0ee 100644 (file)
@@ -1,3 +1,8 @@
+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.
index b5d4b02329ca91b4e5a654a12bd9628a64836d15..7c748380cb3ff630bb2d9cea799d6546f2bb733c 100644 (file)
@@ -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
index 5124dbb8b651b7aab8a0a6f75fbcfe5957bc9efc..4580f60021b31c02a7f29c9763c1d0d67a1c2960 100644 (file)
@@ -1,3 +1,8 @@
+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.
index 0f450a0f476e94dd27e867dde12c92c287c7029c..43a04c1c064094f8b8fe54248da9360b6a5e712f 100644 (file)
@@ -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"
index 8cedd870138c17337c7f320472a87fbd133d880f..c11ccfb2a86b3ca80a09db825ed9afce76a325ae 100644 (file)
@@ -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;