This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] (Ada) Remove printing of array's first index when unneeded


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e3861a03138e24e7f2f0e8c4982bdad2a6e1dbaf

commit e3861a03138e24e7f2f0e8c4982bdad2a6e1dbaf
Author: Xavier Roirand <roirand@adacore.com>
Date:   Thu Jan 4 23:47:05 2018 -0500

    (Ada) Remove printing of array's first index when unneeded
    
    Consider the following code:
    
      type Table is array (Character) of Natural;
      My_Table : Table := (others => 4874);
    
    Printing this table in gdb leads to:
    
      (gdb) p my_table
      $1 = ('["00"]' => 4874 <repeats 256 times>)
    
    In this case, the index of the first element in this array is also
    the first element of the index type (character type). Similar to what
    we do we enumeration types, we do not need to print the index of the
    first element when printing the array.
    
    This patch fixes this issue and changes the output as follow:
    
      (gdb) p my_table
      $1 = (4874 <repeats 256 times>)
    
    gdb/ChangeLog:
    
            * ada-valprint.c (print_optional_low_bound): Handle
            character-indexed array printing like boolean-indexed array
            printing.
    
    gdb/testuite/ChangeLog:
    
            * testsuite/gdb.ada/array_char_idx/pck.ads (Table): New type.
            (My_Table): New global variable.
            * testsuite/gdb.ada/array_char_idx.exp: Add test.
    
    Tested on x86_64-linux.

Diff:
---
 gdb/ChangeLog                                | 6 ++++++
 gdb/ada-valprint.c                           | 2 ++
 gdb/testsuite/ChangeLog                      | 6 ++++++
 gdb/testsuite/gdb.ada/array_char_idx.exp     | 3 +++
 gdb/testsuite/gdb.ada/array_char_idx/pck.ads | 3 +++
 5 files changed, 20 insertions(+)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b632382..ab98fb4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-03  Xavier Roirand  <roirand@adacore.com>
+
+	* ada-valprint.c (print_optional_low_bound): Handle
+	character-indexed array printing like boolean-indexed array
+	printing.
+
 2018-01-05  Joel Brobecker  <brobecker@adacore.com>
 
 	* NEWS: Create a new section for the next release branch.
diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c
index c5efdf1..f5a2c3c 100644
--- a/gdb/ada-valprint.c
+++ b/gdb/ada-valprint.c
@@ -88,9 +88,11 @@ print_optional_low_bound (struct ui_file *stream, struct type *type,
       index_type = TYPE_TARGET_TYPE (index_type);
     }
 
+  /* Don't print the lower bound if it's the default one.  */
   switch (TYPE_CODE (index_type))
     {
     case TYPE_CODE_BOOL:
+    case TYPE_CODE_CHAR:
       if (low_bound == 0)
 	return 0;
       break;
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ea9d65c..f45ae0c 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-05  Xavier Roirand  <brobecker@adacore.com>
+
+	* testsuite/gdb.ada/array_char_idx/pck.ads (Table): New type.
+	(My_Table): New global variable.
+	* testsuite/gdb.ada/array_char_idx.exp: Add test.
+
 2018-01-04  Joel Brobecker  <brobecker@adacore.com>
 
 	PR gdb/22670
diff --git a/gdb/testsuite/gdb.ada/array_char_idx.exp b/gdb/testsuite/gdb.ada/array_char_idx.exp
index 2608a8e..89805fb 100644
--- a/gdb/testsuite/gdb.ada/array_char_idx.exp
+++ b/gdb/testsuite/gdb.ada/array_char_idx.exp
@@ -30,3 +30,6 @@ gdb_test "ptype char_table" \
 
 gdb_test "ptype global_char_table" \
          "= array \\(character\\) of natural"
+
+gdb_test "print my_table" "= \\(0 <repeats 256 times>\\)" \
+         "Display my_table"
diff --git a/gdb/testsuite/gdb.ada/array_char_idx/pck.ads b/gdb/testsuite/gdb.ada/array_char_idx/pck.ads
index a26393a..699fef9 100644
--- a/gdb/testsuite/gdb.ada/array_char_idx/pck.ads
+++ b/gdb/testsuite/gdb.ada/array_char_idx/pck.ads
@@ -19,5 +19,8 @@ package Pck is
       of Natural;
    Global_Char_Table : Char_Table := (others => 0);
 
+   type Table is array (Character) of Natural;
+   My_Table : Table := (others => 4874);
+
    procedure Do_Nothing (A : System.Address);
 end Pck;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]