binutils-gdb/gdb/testsuite/gdb.base/infcall-nested-structs.exp.tcl
Tom de Vries 6dbc505a74 [gdb/testsuite] Rename *.exp.in to *.exp.tcl
Say we have some common tcl code that we want to include in test-cases
t1.exp and t1.exp.

We could put the common code into a file common.exp alongside the test-cases,
but that will make dejagnu treat that file as another test-case.  To prevent
this, we use a suffix, currently .in, in other words we put the common code in
a file common.exp.in.

The .in suffix however is also used in autoconf, which might cause confusion.

Change the suffix from .in to .tcl.

gdb/testsuite/ChangeLog:

2020-05-15  Tom de Vries  <tdevries@suse.de>

	* gdb.base/align.exp.in: Rename to ...
	* gdb.base/align.exp.tcl: ... this.
	* gdb.base/align-c++.exp: Update.
	* gdb.base/align-c.exp: Update.
	* gdb.base/all-architectures.exp.in: Rename to ...
	* gdb.base/all-architectures.exp: ... this.
	* gdb.base/all-architectures-0.exp: Update.
	* gdb.base/all-architectures-1.exp: Update.
	* gdb.base/all-architectures-2.exp: Update.
	* gdb.base/all-architectures-3.exp: Update.
	* gdb.base/all-architectures-4.exp: Update.
	* gdb.base/all-architectures-5.exp: Update.
	* gdb.base/all-architectures-6.exp: Update.
	* gdb.base/all-architectures-7.exp: Update.
	* gdb.base/infcall-nested-structs.exp.in: Rename to ...
	* gdb.base/infcall-nested-structs.exp.tcl: ... this.
	* gdb.base/infcall-nested-structs-c++.exp: Update.
	* gdb.base/infcall-nested-structs-c.exp: Update.
	* gdb.base/info-types.exp.in: Rename to ...
	* gdb.base/info-types.exp.tcl: ... this.
	* gdb.base/info-types-c++.exp: Update.
	* gdb.base/info-types-c.exp: Update.
	* gdb.base/max-depth.exp.in: Rename to ...
	* gdb.base/max-depth.exp.tcl: ... this.
	* gdb.base/max-depth-c++.exp: Update.
	* gdb.base/max-depth-c.exp: Update.
	* gdb.cp/cpexprs.exp.in: Rename to ...
	* gdb.cp/cpexprs.exp.tcl: ... this.
	* gdb.cp/cpexprs-debug-types.exp: Update.
	* gdb.cp/cpexprs.exp: Update.
	* gdb.cp/infcall-nodebug.exp.in: Rename to ...
	* gdb.cp/infcall-nodebug.exp.tcl: ... this.
	* gdb.cp/infcall-nodebug-c++-d0.exp: Update.
	* gdb.cp/infcall-nodebug-c++-d1.exp: Update.
	* gdb.cp/infcall-nodebug-c-d0.exp: Update.
	* gdb.cp/infcall-nodebug-c-d1.exp: Update.
	* gdb.dwarf2/clang-debug-names.exp.in: Rename to ...
	* gdb.dwarf2/clang-debug-names.exp.tcl: ... this.
	* gdb.dwarf2/clang-debug-names-2.exp: Update.
	* gdb.dwarf2/clang-debug-names.exp: Update.
2020-05-15 14:49:48 +02:00

184 lines
5.2 KiB
Tcl

# This testcase is part of GDB, the GNU debugger.
# Copyright 2018-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 <http://www.gnu.org/licenses/>.
# Some targets can't call functions, so don't even bother with this
# test.
if [target_info exists gdb,cannot_call_functions] {
unsupported "this target can not call functions"
continue
}
set int_types { tc ts ti tl tll }
set float_types { tf td tld }
set complex_types { tfc tdc tldc }
set compile_flags {debug}
if [support_complex_tests] {
lappend compile_flags "additional_flags=-DTEST_COMPLEX"
lappend compile_flags "additional_flags=-Wno-psabi"
}
# Given N (0..25), return the corresponding alphabetic letter in upper
# case.
proc I2A { n } {
return [string range "ABCDEFGHIJKLMNOPQRSTUVWXYZ" $n $n]
}
# Compile a variant of nested-structs.c using TYPES to specify the
# types of the struct fields within the source. Run up to main.
# Also updates the global "testfile" to reflect the most recent build.
proc start_nested_structs_test { lang types } {
global testfile
global srcfile
global binfile
global subdir
global srcdir
global compile_flags
standard_testfile infcall-nested-structs.c
# Create the additional flags
set flags $compile_flags
lappend flags $lang
lappend flags "additional_flags=-O2"
for {set n 0} {$n<[llength ${types}]} {incr n} {
set m [I2A ${n}]
set t [lindex ${types} $n]
lappend flags "additional_flags=-Dt${m}=${t}"
append testfile "-" "$t"
}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "${flags}"] != "" } {
unresolved "failed to compile"
return 0
}
# Start with a fresh gdb.
clean_restart ${binfile}
# Make certain that the output is consistent
gdb_test_no_output "set print sevenbit-strings"
gdb_test_no_output "set print address off"
gdb_test_no_output "set print pretty off"
gdb_test_no_output "set width 0"
gdb_test_no_output "set print elements 300"
# Advance to main
if { ![runto_main] } then {
fail "can't run to main"
return 0
}
# Now continue forward to a suitable location to run the tests.
# Some targets only enable the FPU on first use, so ensure that we
# have used the FPU before we make calls from GDB to code that
# could use the FPU.
gdb_breakpoint [gdb_get_line_number "Break Here"] temporary
gdb_continue_to_breakpoint "breakpt" ".* Break Here\\. .*"
return 1
}
# Assuming GDB is stopped at main within a test binary, run some tests
# passing structures, and reading return value structures.
proc run_tests { lang types } {
global gdb_prompt
foreach {name} {struct_01_01 struct_01_02 struct_01_03 struct_01_04
struct_02_01 struct_02_02 struct_02_03 struct_02_04
struct_04_01 struct_04_02 struct_04_03 struct_04_04
struct_05_01 struct_05_02 struct_05_03 struct_05_04
struct_static_02_01 struct_static_02_02 struct_static_02_03 struct_static_02_04
struct_static_04_01 struct_static_04_02 struct_static_04_03 struct_static_04_04
struct_static_06_01 struct_static_06_02 struct_static_06_03 struct_static_06_04} {
# Only run static member tests on C++
if { $lang == "c" && [regexp "static" $name match] } {
continue
}
gdb_test "p/d check_arg_${name} (ref_val_${name})" "= 1"
set refval [ get_valueof "" "ref_val_${name}" "" ]
verbose -log "Refval: ${refval}"
set test "check return value ${name}"
if { ${refval} != "" } {
set answer [ get_valueof "" "rtn_str_${name} ()" "XXXX"]
verbose -log "Answer: ${answer}"
gdb_assert [string eq ${answer} ${refval}] ${test}
} else {
unresolved $test
}
}
}
# Set up a test prefix, compile the test binary, run to main, and then
# run some tests.
proc start_gdb_and_run_tests { lang types } {
set prefix "types"
foreach t $types {
append prefix "-" "${t}"
}
with_test_prefix $prefix {
if { [start_nested_structs_test $lang $types] } {
run_tests $lang $prefix
}
}
}
foreach ta $int_types {
start_gdb_and_run_tests $lang $ta
}
if [support_complex_tests] {
foreach ta $complex_types {
start_gdb_and_run_tests $lang $ta
}
}
if ![gdb_skip_float_test] {
foreach ta $float_types {
start_gdb_and_run_tests $lang $ta
}
foreach ta $int_types {
foreach tb $float_types {
start_gdb_and_run_tests $lang [list $ta $tb]
}
}
foreach ta $float_types {
foreach tb $int_types {
start_gdb_and_run_tests $lang [list $ta $tb]
}
foreach tb $float_types {
start_gdb_and_run_tests $lang [list $ta $tb]
}
}
}