gdb: Avoid trailing whitespace when pretty printing

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.
This commit is contained in:
Andrew Burgess 2019-03-21 12:25:47 +00:00
parent 53c973f200
commit 18c77628b1
6 changed files with 129 additions and 3 deletions

View 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.

View 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;

View 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

View 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"
}

View File

@ -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;
}

View File

@ -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" \
" }" \
"}" ]