[Ada] fix warning when printing empty array
authorJoel Brobecker <brobecker@gnat.com>
Wed, 3 Nov 2010 23:20:13 +0000 (23:20 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Wed, 3 Nov 2010 23:20:13 +0000 (23:20 +0000)
This patch should fix the following regression:

     (gdb) print my_table
    -$1 = ()
    -(gdb) PASS: gdb.ada/null_array.exp: print my_table
    +$1 = (warning: unable to get bounds of array, assuming null array
    +)
    +(gdb) FAIL: gdb.ada/null_array.exp: print my_table

The problem was introduced by a change in val_print_array_elements
which removed a check for the case where the array's high bound
is smaller than the array's low bound (empty array).

This change restores the check and forces the len to zero in that case.
Looking at the patch that caused the regression, I suspect that we may
have other parts that might have been broken (non-zero array low bound?).

gdb/ChangeLog:

        * valprint.c (val_print_array_elements): Put back handling of
        empty arrays.

gdb/ChangeLog
gdb/valprint.c

index 719582bfb58c5e1ea6588c301f92aff1c6b23950..221868b0caf53944e7299b915f108ca0f25b2a1f 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-03  Joel Brobecker  <brobecker@adacore.com>
+
+       * valprint.c (val_print_array_elements): Put back handling of
+       empty arrays.
+
 2010-11-03  Ken Werner  <ken.werner@de.ibm.com>
 
        * dwarf2read.c (read_array_type): Read the DW_AT_byte_size from the
index dba528bdf66ab739f4662a02e771adb194c081ee..ddb16e4847c4cf9aa6734d132fb71335202ccbcb 100644 (file)
@@ -1118,7 +1118,17 @@ val_print_array_elements (struct type *type, const gdb_byte *valaddr,
   index_type = TYPE_INDEX_TYPE (type);
 
   if (get_array_bounds (type, &low_bound, &high_bound))
-    len = high_bound - low_bound + 1;
+    {
+      /* The array length should normally be HIGH_BOUND - LOW_BOUND + 1.
+         But we have to be a little extra careful, because some languages
+        such as Ada allow LOW_BOUND to be greater than HIGH_BOUND for
+        empty arrays.  In that situation, the array length is just zero,
+        not negative!  */
+      if (low_bound > high_bound)
+       len = 0;
+      else
+       len = high_bound - low_bound + 1;
+    }
   else
     {
       warning (_("unable to get bounds of array, assuming null array"));