| # Copyright 2023-2024 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/>. |
| |
| # This file tests GDB's limited length array printing. |
| |
| load_lib "fortran.exp" |
| |
| require allow_fortran_tests |
| |
| standard_testfile .f90 |
| |
| if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug f90}]} { |
| return -1 |
| } |
| |
| if {![fortran_runto_main]} { |
| perror "Could not run to main." |
| continue |
| } |
| |
| gdb_breakpoint [gdb_get_line_number "Break Here"] |
| gdb_continue_to_breakpoint "stop-here" ".*Break Here.*" |
| |
| with_test_prefix "with standard max-value size" { |
| gdb_test "print large_4d_array" \ |
| " = \\(\\(\\(\\(1, 2, 3\\) \\(4, 5, 6\\) \\(7, 8, 9\\)\\)\ |
| \\(\\(10, 11, 12\\) \\(13, 14, 15\\) \\(16, 17, 18\\)\\)\ |
| \\(\\(19, 20, 21\\) \\(22, 23, 24\\) \\(25, 26, 27\\)\\)\\)\ |
| \\(\\(\\(28, 29, 30\\) \\(31, 32, 33\\) \\(34, 35, 36\\)\\)\ |
| \\(\\(37, 38, 39\\) \\(40, 41, 42\\) \\(43, 44, 45\\)\\)\ |
| \\(\\(46, 47, 48\\) \\(49, 50, 51\\) \\(52, 53, 54\\)\\)\\)\ |
| \\(\\(\\(55, 56, 57\\) \\(58, 59, 60\\) \\(61, 62, 63\\)\\)\ |
| \\(\\(64, 65, 66\\) \\(67, 68, 69\\) \\(70, 71, 72\\)\\)\ |
| \\(\\(73, 74, 75\\) \\(76, 77, 78\\)\ |
| \\(79, 80, 81\\)\\)\\)\\)" |
| gdb_test -nonl "output large_4d_array" \ |
| "\\(\\(\\(\\(1, 2, 3\\) \\(4, 5, 6\\) \\(7, 8, 9\\)\\)\ |
| \\(\\(10, 11, 12\\) \\(13, 14, 15\\) \\(16, 17, 18\\)\\)\ |
| \\(\\(19, 20, 21\\) \\(22, 23, 24\\) \\(25, 26, 27\\)\\)\\)\ |
| \\(\\(\\(28, 29, 30\\) \\(31, 32, 33\\) \\(34, 35, 36\\)\\)\ |
| \\(\\(37, 38, 39\\) \\(40, 41, 42\\) \\(43, 44, 45\\)\\)\ |
| \\(\\(46, 47, 48\\) \\(49, 50, 51\\) \\(52, 53, 54\\)\\)\\)\ |
| \\(\\(\\(55, 56, 57\\) \\(58, 59, 60\\) \\(61, 62, 63\\)\\)\ |
| \\(\\(64, 65, 66\\) \\(67, 68, 69\\) \\(70, 71, 72\\)\\)\ |
| \\(\\(73, 74, 75\\) \\(76, 77, 78\\) \\(79, 80, 81\\)\\)\\)\\)" |
| gdb_test "print large_1d_array" \ |
| " = \\(1, 2, 3, 4, 5, 6, 7, 8, 9,\ |
| 10, 11, 12, 13, 14, 15, 16, 17, 18,\ |
| 19, 20, 21, 22, 23, 24, 25, 26, 27,\ |
| 28, 29, 30, 31, 32, 33, 34, 35, 36,\ |
| 37, 38, 39, 40, 41, 42, 43, 44, 45,\ |
| 46, 47, 48, 49, 50, 51, 52, 53, 54,\ |
| 55, 56, 57, 58, 59, 60, 61, 62, 63,\ |
| 64, 65, 66, 67, 68, 69, 70, 71, 72,\ |
| 73, 74, 75, 76, 77, 78, 79, 80, 81\\)" |
| gdb_test -nonl "output large_1d_array" \ |
| "\\(1, 2, 3, 4, 5, 6, 7, 8, 9,\ |
| 10, 11, 12, 13, 14, 15, 16, 17, 18,\ |
| 19, 20, 21, 22, 23, 24, 25, 26, 27,\ |
| 28, 29, 30, 31, 32, 33, 34, 35, 36,\ |
| 37, 38, 39, 40, 41, 42, 43, 44, 45,\ |
| 46, 47, 48, 49, 50, 51, 52, 53, 54,\ |
| 55, 56, 57, 58, 59, 60, 61, 62, 63,\ |
| 64, 65, 66, 67, 68, 69, 70, 71, 72,\ |
| 73, 74, 75, 76, 77, 78, 79, 80, 81\\)" |
| } |
| |
| # Set the max-value-size so we can only print 50 elements. |
| set elements 50 |
| set elem_size [get_valueof "/d" "sizeof(large_1d_array(1))" "*unknown*"] |
| gdb_test_no_output "set max-value-size [expr $elem_size * $elements]" |
| |
| with_test_prefix "with reduced max-value size" { |
| gdb_test "print large_4d_array" \ |
| "value requires $decimal bytes, which is more than max-value-size" |
| gdb_test "output large_4d_array" \ |
| "value requires $decimal bytes, which is more than max-value-size" |
| gdb_test "print large_1d_array" \ |
| "value requires $decimal bytes, which is more than max-value-size" |
| gdb_test "output large_1d_array" \ |
| "value requires $decimal bytes, which is more than max-value-size" |
| } |
| |
| with_test_prefix "with reduced print -elements flag" { |
| gdb_test "print -elements 5 -- large_4d_array" \ |
| " = \\(\\(\\(\\(1, 2, 3\\) \\(4, 5, \\.\\.\\.\\)\ |
| \\.\\.\\.\\) \\.\\.\\.\\) \\.\\.\\.\\)" |
| gdb_test "print -elements 5 -- large_1d_array" \ |
| " = \\(1, 2, 3, 4, 5, \\.\\.\\.\\)" |
| } |
| |
| gdb_test_no_output "set print elements 5" |
| |
| with_test_prefix "with reduced print elements" { |
| gdb_test "print large_4d_array" \ |
| " = \\(\\(\\(\\(1, 2, 3\\) \\(4, 5, \\.\\.\\.\\)\ |
| \\.\\.\\.\\) \\.\\.\\.\\) \\.\\.\\.\\)" |
| gdb_test -nonl "output large_4d_array" \ |
| "\\(\\(\\(\\(1, 2, 3\\) \\(4, 5, \\.\\.\\.\\)\ |
| \\.\\.\\.\\) \\.\\.\\.\\) \\.\\.\\.\\)" |
| |
| gdb_test "print \$" \ |
| " = \\(\\(\\(\\(1, 2, 3\\) \\(4, 5, \\.\\.\\.\\)\ |
| \\.\\.\\.\\) \\.\\.\\.\\) \\.\\.\\.\\)" \ |
| "print large_4d_array from history" |
| gdb_test -nonl "output \$\$" \ |
| "\\(\\(\\(\\(1, 2, 3\\) \\(4, 5, \\.\\.\\.\\)\ |
| \\.\\.\\.\\) \\.\\.\\.\\) \\.\\.\\.\\)" \ |
| "output large_4d_array from history" |
| |
| gdb_test "print large_1d_array" \ |
| " = \\(1, 2, 3, 4, 5, \\.\\.\\.\\)" |
| gdb_test -nonl "output large_1d_array" \ |
| "\\(1, 2, 3, 4, 5, \\.\\.\\.\\)" |
| |
| gdb_test "print \$" \ |
| " = \\(1, 2, 3, 4, 5, \\.\\.\\.\\)" \ |
| "print large_1d_array from history" |
| gdb_test -nonl "output \$\$" \ |
| "\\(1, 2, 3, 4, 5, \\.\\.\\.\\)" \ |
| "output large_1d_array from history" |
| } |
| |
| gdb_test_no_output "set print elements $elements" |
| |
| with_test_prefix "with print elements matching max-value size" { |
| gdb_test "print \$\$2" \ |
| " = \\(\\(\\(\\(1, 2, 3\\) \\(4, 5, 6\\) \\(7, 8, 9\\)\\)\ |
| \\(\\(10, 11, 12\\) \\(13, 14, 15\\) \\(16, 17, 18\\)\\)\ |
| \\(\\(19, 20, 21\\) \\(22, 23, 24\\) \\(25, 26, 27\\)\\)\\)\ |
| \\(\\(\\(28, 29, 30\\) \\(31, 32, 33\\) \\(34, 35, 36\\)\\)\ |
| \\(\\(37, 38, 39\\) \\(40, 41, 42\\) \\(43, 44, 45\\)\\)\ |
| \\(\\(46, 47, 48\\) \\(49, 50, \\.\\.\\.\\) \\.\\.\\.\\)\\)\ |
| \\.\\.\\.\\)" \ |
| "print large_4d_array from history" |
| gdb_test -nonl "output \$\$3" \ |
| "\\(\\(\\(\\(1, 2, 3\\) \\(4, 5, 6\\) \\(7, 8, 9\\)\\)\ |
| \\(\\(10, 11, 12\\) \\(13, 14, 15\\) \\(16, 17, 18\\)\\)\ |
| \\(\\(19, 20, 21\\) \\(22, 23, 24\\) \\(25, 26, 27\\)\\)\\)\ |
| \\(\\(\\(28, 29, 30\\) \\(31, 32, 33\\) \\(34, 35, 36\\)\\)\ |
| \\(\\(37, 38, 39\\) \\(40, 41, 42\\) \\(43, 44, 45\\)\\)\ |
| \\(\\(46, 47, 48\\) \\(49, 50, \\.\\.\\.\\) \\.\\.\\.\\)\\)\ |
| \\.\\.\\.\\)" \ |
| "output large_4d_array from history" |
| |
| gdb_test "print \$\$2" \ |
| " = \\(1, 2, 3, 4, 5, 6, 7, 8, 9,\ |
| 10, 11, 12, 13, 14, 15, 16, 17, 18,\ |
| 19, 20, 21, 22, 23, 24, 25, 26, 27,\ |
| 28, 29, 30, 31, 32, 33, 34, 35, 36,\ |
| 37, 38, 39, 40, 41, 42, 43, 44, 45,\ |
| 46, 47, 48, 49, 50, \\.\\.\\.\\)" \ |
| "print large_1d_array from history" |
| gdb_test -nonl "output \$\$2" \ |
| "\\(1, 2, 3, 4, 5, 6, 7, 8, 9,\ |
| 10, 11, 12, 13, 14, 15, 16, 17, 18,\ |
| 19, 20, 21, 22, 23, 24, 25, 26, 27,\ |
| 28, 29, 30, 31, 32, 33, 34, 35, 36,\ |
| 37, 38, 39, 40, 41, 42, 43, 44, 45,\ |
| 46, 47, 48, 49, 50, \\.\\.\\.\\)" \ |
| "output large_1d_array from history" |
| } |
| |
| gdb_test_no_output "set max-value-size unlimited" |
| gdb_test_no_output "set print elements unlimited" |
| gdb_test_no_output "set print repeats 2" |
| |
| with_test_prefix "with unlimited print elements" { |
| gdb_test "print \$\$" \ |
| " = \\(\\(\\(\\(1, 2, 3\\) \\(4, 5, 6\\) \\(7, 8, 9\\)\\)\ |
| \\(\\(10, 11, 12\\) \\(13, 14, 15\\) \\(16, 17, 18\\)\\)\ |
| \\(\\(19, 20, 21\\) \\(22, 23, 24\\) \\(25, 26, 27\\)\\)\\)\ |
| \\(\\(\\(28, 29, 30\\) \\(31, 32, 33\\) \\(34, 35, 36\\)\\)\ |
| \\(\\(37, 38, 39\\) \\(40, 41, 42\\) \\(43, 44, 45\\)\\)\ |
| \\(\\(46, 47, 48\\) \\(49, 50, <unavailable>\\)\ |
| \\(<unavailable>, <repeats 3 times>\\)\\)\\)\ |
| \\(\\(\\(<unavailable>, <repeats 3 times>\\)\ |
| <repeats 3 times>\\) <repeats 3 times>\\)\\)" \ |
| "print large_4d_array from history" |
| gdb_test -nonl "output \$\$2" \ |
| "\\(\\(\\(\\(1, 2, 3\\) \\(4, 5, 6\\) \\(7, 8, 9\\)\\)\ |
| \\(\\(10, 11, 12\\) \\(13, 14, 15\\) \\(16, 17, 18\\)\\)\ |
| \\(\\(19, 20, 21\\) \\(22, 23, 24\\) \\(25, 26, 27\\)\\)\\)\ |
| \\(\\(\\(28, 29, 30\\) \\(31, 32, 33\\) \\(34, 35, 36\\)\\)\ |
| \\(\\(37, 38, 39\\) \\(40, 41, 42\\) \\(43, 44, 45\\)\\)\ |
| \\(\\(46, 47, 48\\) \\(49, 50, <unavailable>\\)\ |
| \\(<unavailable>, <repeats 3 times>\\)\\)\\)\ |
| \\(\\(\\(<unavailable>, <repeats 3 times>\\)\ |
| <repeats 3 times>\\) <repeats 3 times>\\)\\)" \ |
| "output large_4d_array from history" |
| |
| gdb_test "print \$\$" \ |
| " = \\(1, 2, 3, 4, 5, 6, 7, 8, 9,\ |
| 10, 11, 12, 13, 14, 15, 16, 17, 18,\ |
| 19, 20, 21, 22, 23, 24, 25, 26, 27,\ |
| 28, 29, 30, 31, 32, 33, 34, 35, 36,\ |
| 37, 38, 39, 40, 41, 42, 43, 44, 45,\ |
| 46, 47, 48, 49, 50, <unavailable>, <repeats 31 times>\\)" \ |
| "print large_1d_array from history" |
| gdb_test -nonl "output \$\$2" \ |
| "\\(1, 2, 3, 4, 5, 6, 7, 8, 9,\ |
| 10, 11, 12, 13, 14, 15, 16, 17, 18,\ |
| 19, 20, 21, 22, 23, 24, 25, 26, 27,\ |
| 28, 29, 30, 31, 32, 33, 34, 35, 36,\ |
| 37, 38, 39, 40, 41, 42, 43, 44, 45,\ |
| 46, 47, 48, 49, 50, <unavailable>, <repeats 31 times>\\)" \ |
| "output large_1d_array from history" |
| } |