aboutsummaryrefslogtreecommitdiff
path: root/gdb/ada-valprint.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@adacore.com>2014-01-09 17:30:39 +0400
committerJoel Brobecker <brobecker@adacore.com>2014-01-27 08:13:49 +0400
commit859cf5d1dea467019bf0a822eeda059427ecf440 (patch)
treef996ea4a42ffd12fe101e42b843bb02ca3252dae /gdb/ada-valprint.c
parent25790f6fc128f0785a3568019727c0512adc079c (diff)
downloadfsf-binutils-gdb-859cf5d1dea467019bf0a822eeda059427ecf440.zip
fsf-binutils-gdb-859cf5d1dea467019bf0a822eeda059427ecf440.tar.gz
fsf-binutils-gdb-859cf5d1dea467019bf0a822eeda059427ecf440.tar.bz2
[Ada] Array bound incorrectly printed for array indexed by enum subrange
Consider the following declarations: type Range_Type is (One, Two, Three); type Array_Type is array (Range_Type range One .. Two) of Integer; A : Array_Type := (1, 2); Trying to print A can yield: (gdb) print a $1 = (one => 1, 2) The bound of the first element should not have been printed, since "one" is the first enumerate of type Range_Type. Similarly, with the following declarations: type Array2_Type is array (Range_Type range Two .. Three) of Integer; A2 : Array2_Type := (2, 3); GDB is failing to print the bound of the first element of "A2": (gdb) print a2 $2 = (2, 3) This is because the index type for both types Array_Type and Array2_Type are subranges (by DWARF definition for arrays), of an anonymous subrange type. When deciding whether to print the bound of the first element, we handle subranges, but only up to one level. This patch enhanced the code to handle any number of subrange levels. gdb/ChangeLog: * ada-valprint.c (print_optional_low_bound): Get index_type's target type for as long as it is a TYPE_CODE_RANGE. No testcase with this patch, but this will be tested via the testcase of another patch, which uses the DWARF assembler to generate debugging info for an array indexed by an enum.
Diffstat (limited to 'gdb/ada-valprint.c')
-rw-r--r--gdb/ada-valprint.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index 8f2219f..b7b3a9c 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -79,7 +79,7 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
index_type = TYPE_INDEX_TYPE (type);
- if (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
+ while (TYPE_CODE (index_type) == TYPE_CODE_RANGE)
{
/* We need to know what the base type is, in order to do the
appropriate check below. Otherwise, if this is a subrange