gdb: Avoid trailing whitespace when pretty printing
authorAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 21 Mar 2019 12:25:47 +0000 (12:25 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 26 Mar 2019 18:23:49 +0000 (18:23 +0000)
While writing a new test for 'set print pretty on' I spotted that GDB
will sometimes add a trailing whitespace character when pretty
printing.  This commit removes the trailing whitespace and updates the
expected results in one tests where this was an issue.

I've added an extra test for 'set print pretty on' as it doesn't seem
to have much testing.

gdb/ChangeLog:

* cp-valprint.c (cp_print_value_fields): Don't print trailing
whitespace when pretty printing is on.

gdb/testsuite/ChangeLog:

* gdb.base/finish-pretty.exp: Update expected results.
* gdb.base/pretty-print.c: New file.
* gdb.base/pretty-print.exp: New file.

gdb/ChangeLog
gdb/cp-valprint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/finish-pretty.exp
gdb/testsuite/gdb.base/pretty-print.c [new file with mode: 0644]
gdb/testsuite/gdb.base/pretty-print.exp [new file with mode: 0644]

index 28754becd906f0e71a7b8d60954c781a35943806..a31cf7041f294f4ad54ff5558124ac47e658c405 100644 (file)
@@ -1,3 +1,8 @@
+2019-03-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * cp-valprint.c (cp_print_value_fields): Don't print trailing
+       whitespace when pretty printing is on.
+
 2019-03-26  Alan Hayward  <alan.hayward@arm.com>
 
         * ppc-linux-nat.c: Add include.
index 7124da42ec9a35c3508e42bf6302996030aad728..443c3b06dac8986e5b07774d053eb75b2d92dc25 100644 (file)
@@ -235,7 +235,11 @@ cp_print_value_fields (struct type *type, struct type *real_type,
            continue;
 
          if (fields_seen)
-           fprintf_filtered (stream, ", ");
+           {
+             fputs_filtered (",", stream);
+             if (!options->prettyformat)
+               fputs_filtered (" ", stream);
+           }
          else if (n_baseclasses > 0)
            {
              if (options->prettyformat)
@@ -244,7 +248,7 @@ cp_print_value_fields (struct type *type, struct type *real_type,
                  print_spaces_filtered (2 + 2 * recurse, stream);
                  fputs_filtered ("members of ", stream);
                  fputs_filtered (TYPE_NAME (type), stream);
-                 fputs_filtered (": ", stream);
+                 fputs_filtered (":", stream);
                }
            }
          fields_seen = 1;
index 9e0c49a9cdf2020a155e3e67aaf23125c03d317c..a2b8f2428520948b0b05eca6758e49f180abe92f 100644 (file)
@@ -1,3 +1,9 @@
+2019-03-26  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * gdb.base/finish-pretty.exp: Update expected results.
+       * gdb.base/pretty-print.c: New file.
+       * gdb.base/pretty-print.exp: New file.
+
 2019-03-25  Pedro Alves  <palves@redhat.com>
 
        * lib/gdb.exp (gdb_test_multiple): Split appends to $code and
index c558d22b57612b5db681b1231c3723f7d6fdc9ac..b1530cda59112c6832a042c62257222c197f8e37 100644 (file)
@@ -30,7 +30,7 @@ proc finish_pretty { } {
     gdb_test_no_output "set print pretty" \
        "pretty printing switched on"
     gdb_test "finish" \
-       {.*Value returned is \$1 = \{\r\n  a = 1, \r\n  b = 2\r\n\}} \
+       {.*Value returned is \$1 = \{\r\n  a = 1,\r\n  b = 2\r\n\}} \
        "finish foo prettyprinted function result"
 }
 
diff --git a/gdb/testsuite/gdb.base/pretty-print.c b/gdb/testsuite/gdb.base/pretty-print.c
new file mode 100644 (file)
index 0000000..9e241f8
--- /dev/null
@@ -0,0 +1,53 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+struct s1_t
+{
+  int one;
+  int two;
+
+  struct
+  {
+    union {
+      int three : 3;
+      int four : 4;
+    };
+
+    union {
+      int five : 3;
+      int six : 4;
+    };
+  } data;
+} s1 = { .one = 1, .two = 2, .data = { .three = 3, .five = 5 } };
+
+struct s2_t
+{
+  int one;
+  int two;
+
+  struct
+  {
+    int three;
+    int four;
+  };
+} s2 = { .one = 1, .two = 2, .three = 3, .four = 4 };
+
+int
+main ()
+{
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/pretty-print.exp b/gdb/testsuite/gdb.base/pretty-print.exp
new file mode 100644 (file)
index 0000000..91e685e
--- /dev/null
@@ -0,0 +1,58 @@
+# Copyright 2019 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test pretty printing of structures and unions.
+
+standard_testfile
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
+    untested $testfile.exp
+    return -1
+}
+
+if ![runto_main] {
+    untested $testfile.exp
+    return -1
+}
+
+gdb_test_no_output "set print pretty on"
+
+gdb_test "print s1" \
+    [multi_line \
+        " = {" \
+        "  one = 1," \
+        "  two = 2," \
+        "  data = {" \
+        "    {" \
+        "      three = 3," \
+        "      four = 3" \
+        "    }," \
+        "    {" \
+        "      five = -3," \
+        "      six = 5" \
+        "    }" \
+        "  }" \
+        "}" ]
+
+gdb_test "print s2" \
+    [multi_line \
+        " = {" \
+        "  one = 1," \
+        "  two = 2," \
+        "  {" \
+        "    three = 3," \
+        "    four = 4" \
+        "  }" \
+        "}" ]