diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ef605655999..9e1ce39c9e2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,18 @@ +2020-04-29 Hannes Domani + + PR gdb/17320 + * ada-valprint.c (val_print_packed_array_elements): Move array + end bracket to new line. + (ada_val_print_string): Remove extra spaces before first array + element. + * c-valprint.c (c_value_print_array): Likewise. + * m2-valprint.c (m2_print_array_contents): Likewise. + (m2_value_print_inner): Likewise. + * p-valprint.c (pascal_value_print_inner): Likewise. + * valprint.c (generic_val_print_array): Likewise. + (value_print_array_elements): Move first array element and array + end bracket to new line. + 2020-04-29 Tom de Vries PR symtab/25889 diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index 474b0799910..31f3a50b340 100644 --- a/gdb/ada-valprint.c +++ b/gdb/ada-valprint.c @@ -195,6 +195,11 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, fprintf_filtered (stream, ", "); } } + else if (options->prettyformat_arrays) + { + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 + 2 * recurse, stream); + } wrap_here (n_spaces (2 + 2 * recurse)); maybe_print_array_index (index_type, i + low, stream, options); @@ -707,9 +712,6 @@ ada_val_print_string (struct type *type, const gdb_byte *valaddr, eltlen = TYPE_LENGTH (elttype); len = TYPE_LENGTH (type) / eltlen; - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); - /* If requested, look for the first null char and only print elements up to it. */ if (options->stop_print_at_null) diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index bde9c6cc883..52ea5eda0c1 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -252,10 +252,6 @@ c_value_print_array (struct value *val, eltlen = TYPE_LENGTH (elttype); len = high_bound - low_bound + 1; - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } /* Print arrays of textual chars with a string syntax, as long as the entire array is valid. */ diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c index 844a63f3bd6..e210b5ec2f1 100644 --- a/gdb/m2-valprint.c +++ b/gdb/m2-valprint.c @@ -265,8 +265,6 @@ m2_print_array_contents (struct value *val, if (TYPE_LENGTH (type) > 0) { - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); /* For an array of chars, print with string syntax. */ if (TYPE_LENGTH (type) == 1 && ((TYPE_CODE (type) == TYPE_CODE_INT) @@ -318,8 +316,6 @@ m2_value_print_inner (struct value *val, struct ui_file *stream, int recurse, { elttype = check_typedef (TYPE_TARGET_TYPE (type)); len = TYPE_LENGTH (type) / TYPE_LENGTH (elttype); - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); /* For an array of chars, print with string syntax. */ if (TYPE_LENGTH (elttype) == 1 && ((TYPE_CODE (elttype) == TYPE_CODE_INT) diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c index cbd7fb75e24..fbf5c5cf141 100644 --- a/gdb/p-valprint.c +++ b/gdb/p-valprint.c @@ -93,10 +93,6 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, len = high_bound - low_bound + 1; elttype = check_typedef (TYPE_TARGET_TYPE (type)); eltlen = TYPE_LENGTH (elttype); - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } /* If 's' format is used, try to print out as string. If no format is given, print as string if element type is of TYPE_CODE_CHAR and element size is 1,2 or 4. */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 761fe30535e..86b71913b01 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2020-04-29 Hannes Domani + + PR gdb/17320 + * gdb.base/pretty-array.c: New test. + * gdb.base/pretty-array.exp: New file. + 2020-04-29 Tom de Vries PR symtab/25889 diff --git a/gdb/testsuite/gdb.base/pretty-array.c b/gdb/testsuite/gdb.base/pretty-array.c new file mode 100644 index 00000000000..2adebcca8c6 --- /dev/null +++ b/gdb/testsuite/gdb.base/pretty-array.c @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020 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 . */ + +int nums[2][3] = {{11, 12, 13}, {21, 22, 23}}; + +int +main () +{ + return 0; +} diff --git a/gdb/testsuite/gdb.base/pretty-array.exp b/gdb/testsuite/gdb.base/pretty-array.exp new file mode 100644 index 00000000000..e17ce18857a --- /dev/null +++ b/gdb/testsuite/gdb.base/pretty-array.exp @@ -0,0 +1,65 @@ +# Copyright 2020 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 . + +# Test pretty printing of arrays. + +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 "print nums" \ + "= \\{\\{11, 12, 13\\}, \\{21, 22, 23\\}\\}" + +gdb_test_no_output "set print array on" + +gdb_test "print nums" \ + [multi_line \ + " = {" \ + " {" \ + " 11," \ + " 12," \ + " 13" \ + " }," \ + " {" \ + " 21," \ + " 22," \ + " 23" \ + " }" \ + "}" ] + +gdb_test_no_output "set print array-indexes on" + +gdb_test "print nums" \ + [multi_line \ + " = {" \ + " \\\[0\\\] = {" \ + " \\\[0\\\] = 11," \ + " \\\[1\\\] = 12," \ + " \\\[2\\\] = 13" \ + " }," \ + " \\\[1\\\] = {" \ + " \\\[0\\\] = 21," \ + " \\\[1\\\] = 22," \ + " \\\[2\\\] = 23" \ + " }" \ + "}" ] diff --git a/gdb/valprint.c b/gdb/valprint.c index 0be7c6071b7..2f910242fcc 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -441,11 +441,6 @@ generic_val_print_array (struct value *val, if (!get_array_bounds (type, &low_bound, &high_bound)) error (_("Could not determine the array high bound")); - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } - fputs_filtered (decorations->array_start, stream); value_print_array_elements (val, stream, recurse, options, 0); fputs_filtered (decorations->array_end, stream); @@ -1945,6 +1940,11 @@ value_print_array_elements (struct value *val, struct ui_file *stream, else fprintf_filtered (stream, ", "); } + else if (options->prettyformat_arrays) + { + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 + 2 * recurse, stream); + } wrap_here (n_spaces (2 + 2 * recurse)); maybe_print_array_index (index_type, i + low_bound, stream, options); @@ -1988,6 +1988,11 @@ value_print_array_elements (struct value *val, struct ui_file *stream, annotate_array_section_end (); if (i < len) fprintf_filtered (stream, "..."); + if (options->prettyformat_arrays) + { + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 * recurse, stream); + } } /* Read LEN bytes of target memory at address MEMADDR, placing the