summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/ada-typeprint.c13
2 files changed, 16 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1d1eef56eef..773f887a9b3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2011-07-01 Joel Brobecker <brobecker@adacore.com>
+
+ * ada-typeprint.c (print_record_type): If unable to decode
+ the name of the parent type, use the encoded name.
+
2011-07-01 Jean-Charles Delay <delay@adacore.com>
* ada-typeprint.c (ada_print_type): Fix both PAD type and
diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
index 6bae634e987..bbcef558221 100644
--- a/gdb/ada-typeprint.c
+++ b/gdb/ada-typeprint.c
@@ -621,8 +621,17 @@ print_record_type (struct type *type0, struct ui_file *stream, int show,
parent_type = ada_parent_type (type);
if (ada_type_name (parent_type) != NULL)
- fprintf_filtered (stream, "new %s with record",
- decoded_type_name (parent_type));
+ {
+ const char *parent_name = decoded_type_name (parent_type);
+
+ /* If we fail to decode the parent type name, then use the parent
+ type name as is. Not pretty, but should never happen except
+ when the debugging info is incomplete or incorrect. This
+ prevents a crash trying to print a NULL pointer. */
+ if (parent_name == NULL)
+ parent_name = ada_type_name (parent_type);
+ fprintf_filtered (stream, "new %s with record", parent_name);
+ }
else if (parent_type == NULL && ada_is_tagged_type (type, 0))
fprintf_filtered (stream, "tagged record");
else