xref: /netbsd-src/external/gpl3/gdb/dist/gdb/testsuite/gdb.ada/arrayptr.exp (revision d16b7486a53dcb8072b60ec6fcb4373a2d0c27b7)
1# Copyright 2008-2023 Free Software Foundation, Inc.
2#
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16load_lib "ada.exp"
17
18if { [skip_ada_tests] } { return -1 }
19
20standard_ada_testfile foo
21
22foreach_with_prefix scenario {all minimal} {
23    set flags [list debug additional_flags=-fgnat-encodings=$scenario]
24
25    if {[gdb_compile_ada "${srcfile}" "${binfile}-${scenario}" executable $flags] != ""} {
26	return -1
27    }
28
29    clean_restart ${testfile}-${scenario}
30
31    set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
32    if {![runto "foo.adb:$bp_location"]} {
33	return
34    }
35
36    gdb_test "print string_p" \
37	"= \\(foo\\.string_access\\) 0x\[0-9a-zA-Z\]+"
38
39    gdb_test "print string_p(3..4)" "= \"ll\""
40
41    gdb_test "print null_string" "= \\(foo\\.string_access\\) 0x0"
42
43    gdb_test "print arr_ptr" "= \\(access foo\\.little_array\\) 0x\[0-9a-zA-Z\]+"
44
45    gdb_test "print arr_ptr(2)" "= 22"
46
47    gdb_test "print arr_ptr(3..4)" "= \\(3 => 23, 24\\)"
48
49    gdb_test "ptype string_access" "= access array \\(<>\\) of character"
50
51    # GNAT >= 12.0 has the needed fix here.
52    set xfail_expected 0
53    if {$scenario == "minimal" && ![test_compiler_info {gcc-1[2-9]-*}]} {
54	set xfail_expected 1
55    }
56
57    gdb_test_multiple "print pa_ptr.all" "" {
58	-re -wrap " = \\(10, 20, 30, 40, 50, 60, 62, 63, -23, 42\\)" {
59	    pass $gdb_test_name
60	}
61	-re -wrap " = \[0-9\]+" {
62	    if { $xfail_expected } {
63		xfail $gdb_test_name
64	    } else {
65		fail $gdb_test_name
66	    }
67	}
68    }
69
70    set xfail_cannot_subscript_re \
71	"cannot subscript or call something of type `foo__packed_array_ptr'"
72
73    gdb_test_multiple "print pa_ptr(3)" "" {
74	-re -wrap " = 30" {
75	    pass $gdb_test_name
76
77	}
78	-re -wrap $xfail_cannot_subscript_re {
79	    if { $xfail_expected } {
80		xfail $gdb_test_name
81	    } else {
82		fail $gdb_test_name
83	    }
84	}
85    }
86
87    set xfail_attempt_to_index_re \
88	"Attempt to index or call something other than an array or function"
89
90    gdb_test_multiple "print pa_ptr.all(3)" "" {
91	-re -wrap " = 30" {
92	    pass $gdb_test_name
93
94	}
95	-re -wrap $xfail_attempt_to_index_re {
96	    if { $xfail_expected } {
97		xfail $gdb_test_name
98	    } else {
99		fail $gdb_test_name
100	    }
101	}
102    }
103}
104