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.
+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.
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
+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.
"= \\(foo\\.string_access\\) 0x\[0-9a-zA-Z\]+" \
"print string_p"
+gdb_test "print null_string" "= \\(foo\\.string_access\\) 0x0"
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;