[gdb/symtab] Handle .gdb_index in ada language mode
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / infcall-nested-structs.exp.tcl
CommitLineData
dbbb1059
AB
1# This testcase is part of GDB, the GNU debugger.
2
b811d2c2 3# Copyright 2018-2020 Free Software Foundation, Inc.
dbbb1059
AB
4
5# This program is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program. If not, see <http://www.gnu.org/licenses/>.
17
dbbb1059
AB
18# Some targets can't call functions, so don't even bother with this
19# test.
20
21if [target_info exists gdb,cannot_call_functions] {
22 unsupported "this target can not call functions"
23 continue
24}
25
26set int_types { tc ts ti tl tll }
27set float_types { tf td tld }
28set complex_types { tfc tdc tldc }
29
30set compile_flags {debug}
31if [support_complex_tests] {
32 lappend compile_flags "additional_flags=-DTEST_COMPLEX"
73021deb 33 lappend compile_flags "additional_flags=-Wno-psabi"
dbbb1059
AB
34}
35
36# Given N (0..25), return the corresponding alphabetic letter in upper
37# case.
38
39proc I2A { n } {
40 return [string range "ABCDEFGHIJKLMNOPQRSTUVWXYZ" $n $n]
41}
42
43# Compile a variant of nested-structs.c using TYPES to specify the
44# types of the struct fields within the source. Run up to main.
45# Also updates the global "testfile" to reflect the most recent build.
46
73021deb 47proc start_nested_structs_test { lang types } {
dbbb1059
AB
48 global testfile
49 global srcfile
50 global binfile
51 global subdir
52 global srcdir
53 global compile_flags
54
971a3747 55 standard_testfile infcall-nested-structs.c
dbbb1059
AB
56
57 # Create the additional flags
58 set flags $compile_flags
73021deb 59 lappend flags $lang
94cb3754 60 lappend flags "additional_flags=-O2"
dbbb1059
AB
61
62 for {set n 0} {$n<[llength ${types}]} {incr n} {
63 set m [I2A ${n}]
64 set t [lindex ${types} $n]
65 lappend flags "additional_flags=-Dt${m}=${t}"
66 append testfile "-" "$t"
67 }
68
dbbb1059
AB
69 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags}"] != "" } {
70 unresolved "failed to compile"
71 return 0
72 }
73
74 # Start with a fresh gdb.
75 clean_restart ${binfile}
76
77 # Make certain that the output is consistent
78 gdb_test_no_output "set print sevenbit-strings"
79 gdb_test_no_output "set print address off"
80 gdb_test_no_output "set print pretty off"
81 gdb_test_no_output "set width 0"
82 gdb_test_no_output "set print elements 300"
83
84 # Advance to main
85 if { ![runto_main] } then {
86 fail "can't run to main"
87 return 0
88 }
89
90 # Now continue forward to a suitable location to run the tests.
91 # Some targets only enable the FPU on first use, so ensure that we
92 # have used the FPU before we make calls from GDB to code that
93 # could use the FPU.
94 gdb_breakpoint [gdb_get_line_number "Break Here"] temporary
95 gdb_continue_to_breakpoint "breakpt" ".* Break Here\\. .*"
96
97 return 1
98}
99
100# Assuming GDB is stopped at main within a test binary, run some tests
101# passing structures, and reading return value structures.
102
73021deb 103proc run_tests { lang types } {
dbbb1059
AB
104 global gdb_prompt
105
36eb4c5f
AH
106 foreach {name} {struct_01_01 struct_01_02 struct_01_03 struct_01_04
107 struct_02_01 struct_02_02 struct_02_03 struct_02_04
108 struct_04_01 struct_04_02 struct_04_03 struct_04_04
353229bf
AH
109 struct_05_01 struct_05_02 struct_05_03 struct_05_04
110 struct_static_02_01 struct_static_02_02 struct_static_02_03 struct_static_02_04
111 struct_static_04_01 struct_static_04_02 struct_static_04_03 struct_static_04_04
112 struct_static_06_01 struct_static_06_02 struct_static_06_03 struct_static_06_04} {
113
114 # Only run static member tests on C++
115 if { $lang == "c" && [regexp "static" $name match] } {
116 continue
117 }
73021deb 118
dbbb1059
AB
119 gdb_test "p/d check_arg_${name} (ref_val_${name})" "= 1"
120
121 set refval [ get_valueof "" "ref_val_${name}" "" ]
122 verbose -log "Refval: ${refval}"
123
124 set test "check return value ${name}"
125 if { ${refval} != "" } {
73021deb 126
dbbb1059
AB
127 set answer [ get_valueof "" "rtn_str_${name} ()" "XXXX"]
128 verbose -log "Answer: ${answer}"
73021deb 129
dbbb1059
AB
130 gdb_assert [string eq ${answer} ${refval}] ${test}
131 } else {
132 unresolved $test
133 }
134 }
135}
136
137# Set up a test prefix, compile the test binary, run to main, and then
138# run some tests.
139
73021deb 140proc start_gdb_and_run_tests { lang types } {
dbbb1059
AB
141 set prefix "types"
142
143 foreach t $types {
144 append prefix "-" "${t}"
145 }
146
971a3747
TV
147 with_test_prefix $prefix {
148 if { [start_nested_structs_test $lang $types] } {
149 run_tests $lang $prefix
dbbb1059
AB
150 }
151 }
152}
153
154foreach ta $int_types {
73021deb 155 start_gdb_and_run_tests $lang $ta
dbbb1059
AB
156}
157
158if [support_complex_tests] {
159 foreach ta $complex_types {
73021deb 160 start_gdb_and_run_tests $lang $ta
dbbb1059
AB
161 }
162}
163
164if ![gdb_skip_float_test] {
165 foreach ta $float_types {
73021deb 166 start_gdb_and_run_tests $lang $ta
dbbb1059
AB
167 }
168
169 foreach ta $int_types {
170 foreach tb $float_types {
73021deb 171 start_gdb_and_run_tests $lang [list $ta $tb]
dbbb1059
AB
172 }
173 }
174
175 foreach ta $float_types {
176 foreach tb $int_types {
73021deb 177 start_gdb_and_run_tests $lang [list $ta $tb]
dbbb1059
AB
178 }
179
180 foreach tb $float_types {
73021deb 181 start_gdb_and_run_tests $lang [list $ta $tb]
dbbb1059
AB
182 }
183 }
184}
This page took 0.319656 seconds and 4 git commands to generate.