# Copyright 2023 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 .
load_lib "ada.exp"
require allow_ada_tests
standard_ada_testfile foo
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \
[list debug ]] != "" } {
return -1
}
clean_restart ${testfile}
set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
if {![runto "foo.adb:$bp_location"]} {
perror "Couldn't run ${testfile}"
return
}
with_test_prefix "with standard max-value size" {
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\\)"
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\\)"
gdb_test "print Large_3d_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\\)\\)\\)"
gdb_test -nonl "output Large_3d_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\\)\\)\\)"
}
# Set the max-value-size so we can only print 33 elements.
set elements 33
set elem_size [get_valueof "/d" "(Large_1d_Array(1)'Size + 7) / 8" "*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_1d_Array" \
"value of type `.*' requires $decimal bytes,\
which is more than max-value-size"
gdb_test "output Large_1d_Array" \
"value of type `.*' requires $decimal bytes,\
which is more than max-value-size"
gdb_test "print Large_3d_Array" \
"value of type `.*' requires $decimal bytes,\
which is more than max-value-size"
gdb_test "output Large_3d_Array" \
"value of type `.*' requires $decimal bytes,\
which is more than max-value-size"
}
with_test_prefix "with reduced print -elements flag" {
gdb_test "print -elements 2 -- Large_1d_Array" \
" = \\(1, 2\\.\\.\\.\\)"
gdb_test "print -elements 2 -- Large_3d_Array" \
" = \\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\
\\(\\(17, 18\\.\\.\\.\\),\
\\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)"
}
gdb_test_no_output "set print elements 2"
with_test_prefix "with reduced print elements" {
gdb_test "print Large_1d_Array" \
" = \\(1, 2\\.\\.\\.\\)"
gdb_test -nonl "output Large_1d_Array" \
"\\(1, 2\\.\\.\\.\\)"
gdb_test "print \$" \
" = \\(1, 2\\.\\.\\.\\)" \
"print Large_1d_Array from history"
gdb_test -nonl "output \$\$" \
"\\(1, 2\\.\\.\\.\\)" \
"output Large_1d_Array from history"
gdb_test "print Large_3d_Array" \
" = \\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\
\\(\\(17, 18\\.\\.\\.\\),\
\\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)"
gdb_test -nonl "output Large_3d_Array" \
"\\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\
\\(\\(17, 18\\.\\.\\.\\),\
\\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)"
gdb_test "print \$" \
" = \\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\
\\(\\(17, 18\\.\\.\\.\\),\
\\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)" \
"print Large_3d_Array from history"
gdb_test -nonl "output \$\$" \
"\\(\\(\\(1, 2\\.\\.\\.\\), \\(5, 6\\.\\.\\.\\)\\.\\.\\.\\),\
\\(\\(17, 18\\.\\.\\.\\),\
\\(21, 22\\.\\.\\.\\)\\.\\.\\.\\)\\.\\.\\.\\)" \
"output Large_3d_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\\.\\.\\.\\)" \
"print Large_1d_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\\.\\.\\.\\)" \
"output Large_1d_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(?:, )\{3\}\\)(?:,\
\\((?:, )\{3\}\\))\{3\}\\),\
\\(\\((?:, )\{3\}\\)(?:,\
\\((?:, )\{3\}\\))\{3\}\\)\\)" \
"print Large_3d_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(?:, )\{3\}\\)(?:,\
\\((?:, )\{3\}\\))\{3\}\\),\
\\(\\((?:, )\{3\}\\)(?:,\
\\((?:, )\{3\}\\))\{3\}\\)\\)" \
"output Large_3d_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,\
\\)" \
"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,\
\\)" \
"output Large_1d_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, \\),\
\\( \\) \\),\
\\(\\( \\)\
\\)\\)" \
"print Large_3d_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, \\),\
\\( \\) \\),\
\\(\\( \\) \\)\\)" \
"output Large_3d_Array from history"
gdb_test "print \$\[2\]" \
" = \\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\
\\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\)" \
"print available Large_3d_Array row from history"
gdb_test -nonl "output \$\$\[2\]" \
"\\(\\(17, 18, 19, 20\\), \\(21, 22, 23, 24\\),\
\\(25, 26, 27, 28\\), \\(29, 30, 31, 32\\)\\)" \
"output available Large_3d_Array row from history"
gdb_test "print \$\$\[3\]" \
" = \\(\\(33, \\),\
\\( \\) \\)" \
"print partially available Large_3d_Array row from history"
gdb_test -nonl "output \$\$2\[3\]" \
"\\(\\(33, \\),\
\\( \\) \\)" \
"output partially available Large_3d_Array row from history"
# These go straigth to the inferior.
gdb_test "print \$\$2(3)" \
" = \\(\\(33, 34, 35, 36\\), \\(37, 38, 39, 40\\),\
\\(41, 42, 43, 44\\), \\(45, 46, 47, 48\\)\\)" \
"print partially available Large_3d_Array row bypassing history"
gdb_test -nonl "output \$\$3(3)" \
"\\(\\(33, 34, 35, 36\\), \\(37, 38, 39, 40\\),\
\\(41, 42, 43, 44\\), \\(45, 46, 47, 48\\)\\)" \
"output partially available Large_3d_Array row bypassing history"
gdb_test "print \$\$3\[4\]" \
" = " \
"print unavailable Large_3d_Array row from history"
gdb_test -nonl "output \$\$4\[4\]" \
"" \
"output unavailable Large_3d_Array row from history"
gdb_test "print \$\$4\[3\]\[1\]\[1\]" \
" = 33" \
"print available Large_3d_Array element from history"
gdb_test -nonl "output \$\$5\[3\]\[1\]\[1\]" \
"33" \
"output available Large_3d_Array element from history"
gdb_test "print \$\$5\[3\]\[1\]\[2\]" \
" = " \
"print unavailable Large_3d_Array element from history"
gdb_test -nonl "output \$\$6\[3\]\[1\]\[2\]" \
"" \
"output unavailable Large_3d_Array element from history"
gdb_test "print \$\$6\[3\]\[1\]\[1\] + \$\$6\[3\]\[1\]\[2\]" \
"value is not available" \
"print expression referring unavailable element from history"
gdb_test "output \$\$6\[3\]\[1\]\[1\] + \$\$6\[3\]\[1\]\[2\]" \
"value is not available" \
"output expression referring unavailable element from history"
}