diff options
Diffstat (limited to 'gdb/ada-lang.c')
-rw-r--r-- | gdb/ada-lang.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 19ddf5d..a0d6715 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -2790,7 +2790,7 @@ ada_index_type (struct type *type, int n, const char *name) static LONGEST ada_array_bound_from_type (struct type *arr_type, int n, int which) { - struct type *type, *elt_type, *index_type_desc, *index_type; + struct type *type, *index_type_desc, *index_type; int i; gdb_assert (which == 0 || which == 1); @@ -2806,17 +2806,20 @@ ada_array_bound_from_type (struct type *arr_type, int n, int which) else type = arr_type; - elt_type = type; - for (i = n; i > 1; i--) - elt_type = TYPE_TARGET_TYPE (type); - index_type_desc = ada_find_parallel_type (type, "___XA"); ada_fixup_array_indexes_type (index_type_desc); if (index_type_desc != NULL) index_type = to_fixed_range_type (TYPE_FIELD_TYPE (index_type_desc, n - 1), NULL); else - index_type = TYPE_INDEX_TYPE (elt_type); + { + struct type *elt_type = check_typedef (type); + + for (i = 1; i < n; i++) + elt_type = check_typedef (TYPE_TARGET_TYPE (elt_type)); + + index_type = TYPE_INDEX_TYPE (elt_type); + } return (LONGEST) (which == 0 |