summaryrefslogtreecommitdiff
path: root/gdb/ada-typeprint.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2011-07-01 18:27:11 +0000
committerJoel Brobecker <brobecker@gnat.com>2011-07-01 18:27:11 +0000
commit0c9ea96084d9c595cf6b5cdb51ce1bf155cf82fe (patch)
tree9dc5aef5baedb0963511146164d9e1edfe82175b /gdb/ada-typeprint.c
parent5ca93ecc6d937ffc123412330b3e30d7c94e8749 (diff)
downloadgdb-0c9ea96084d9c595cf6b5cdb51ce1bf155cf82fe.tar.gz
Fix ada array bounds display
Array bounds were not correctly displayed when the SHOW parameter of print_type functions is set to -1. This shows up in the following type of situation, where we have a declaration as follow: Anon_Array_Int_Obj : array (1..10) of Integer := (others => 8); In GDB/MI mode, trying to print the type info for our array object yields: (gdb) -var-create ai 0 Anon_Array_Int_Obj (gdb) -var-info-type ai ^done,type="array (...) of integer" The actual bounds are missing. Contrast this with what happens when in GDB/CLI mode: (gdb) ptype Anon_Array_Int_Obj type = array (1 .. 10) of integer This patch fixes array type printing accordingly. And as it turns out, it also improves the output for one of the tests already present, so it shows that it's not just the GDB/MI mode that's affected. gdb/ChangeLog (Jean-Charles Delay): * ada-typeprint.c (print_array_type): removed if condition on show being negative for bounds printing. gdb/testsuite/ChangeLog (Jean-Charles Delay): * gdb.ada/packed_array.exp: fixed expected output.
Diffstat (limited to 'gdb/ada-typeprint.c')
-rw-r--r--gdb/ada-typeprint.c75
1 files changed, 35 insertions, 40 deletions
diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
index 737e09730f7..ff1b524721c 100644
--- a/gdb/ada-typeprint.c
+++ b/gdb/ada-typeprint.c
@@ -340,57 +340,52 @@ print_array_type (struct type *type, struct ui_file *stream, int show,
}
n_indices = -1;
- if (show < 0)
- fprintf_filtered (stream, "...");
- else
+ if (ada_is_simple_array_type (type))
{
- if (ada_is_simple_array_type (type))
- {
- struct type *range_desc_type;
- struct type *arr_type;
+ struct type *range_desc_type;
+ struct type *arr_type;
- range_desc_type = ada_find_parallel_type (type, "___XA");
- ada_fixup_array_indexes_type (range_desc_type);
+ range_desc_type = ada_find_parallel_type (type, "___XA");
+ ada_fixup_array_indexes_type (range_desc_type);
- bitsize = 0;
- if (range_desc_type == NULL)
- {
- for (arr_type = type; TYPE_CODE (arr_type) == TYPE_CODE_ARRAY;
- arr_type = TYPE_TARGET_TYPE (arr_type))
- {
- if (arr_type != type)
- fprintf_filtered (stream, ", ");
- print_range (TYPE_INDEX_TYPE (arr_type), stream);
- if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
- bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
- }
- }
- else
+ bitsize = 0;
+ if (range_desc_type == NULL)
+ {
+ for (arr_type = type; TYPE_CODE (arr_type) == TYPE_CODE_ARRAY;
+ arr_type = TYPE_TARGET_TYPE (arr_type))
{
- int k;
-
- n_indices = TYPE_NFIELDS (range_desc_type);
- for (k = 0, arr_type = type;
- k < n_indices;
- k += 1, arr_type = TYPE_TARGET_TYPE (arr_type))
- {
- if (k > 0)
- fprintf_filtered (stream, ", ");
- print_range_type (TYPE_FIELD_TYPE (range_desc_type, k),
- stream);
- if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
- bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
- }
+ if (arr_type != type)
+ fprintf_filtered (stream, ", ");
+ print_range (TYPE_INDEX_TYPE (arr_type), stream);
+ if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
+ bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
}
}
else
{
- int i, i0;
+ int k;
- for (i = i0 = ada_array_arity (type); i > 0; i -= 1)
- fprintf_filtered (stream, "%s<>", i == i0 ? "" : ", ");
+ n_indices = TYPE_NFIELDS (range_desc_type);
+ for (k = 0, arr_type = type;
+ k < n_indices;
+ k += 1, arr_type = TYPE_TARGET_TYPE (arr_type))
+ {
+ if (k > 0)
+ fprintf_filtered (stream, ", ");
+ print_range_type (TYPE_FIELD_TYPE (range_desc_type, k),
+ stream);
+ if (TYPE_FIELD_BITSIZE (arr_type, 0) > 0)
+ bitsize = TYPE_FIELD_BITSIZE (arr_type, 0);
+ }
}
}
+ else
+ {
+ int i, i0;
+
+ for (i = i0 = ada_array_arity (type); i > 0; i -= 1)
+ fprintf_filtered (stream, "%s<>", i == i0 ? "" : ", ");
+ }
fprintf_filtered (stream, ") of ");
wrap_here ("");