# Copyright 1992-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 was written by Fred Fish. (fnf@cygnus.com)
# and modified by Bob Manson. (manson@cygnus.com)

standard_testfile

# We still want to test non-prototype functions for now, which is why
# we disable compilers warning about them.
set compile_flags {debug additional_flags=-Wno-deprecated-non-prototype}
if [support_complex_tests] {
    lappend compile_flags "additional_flags=-DTEST_COMPLEX"
}

# Some targets can't do function calls, so don't even bother with this
# test.
require {!target_info exists gdb,cannot_call_functions}

set allow_float_test [allow_float_test]

# FIXME:  Before calling this proc, we should probably verify that
# we can call inferior functions and get a valid integral value
# returned.
# Note that it is OK to check for 0 or 1 as the returned values, because C
# specifies that the numeric value of a relational or logical expression
# (computed in the inferior) is 1 for true and 0 for false.

proc do_function_calls {prototypes} {
    global gdb_prompt allow_float_test

    # We need to up this because this can be really slow on some boards.
    set timeout 60

    # If any of these calls segv we don't want to affect subsequent tests.
    # E.g., we want to ensure register values are restored.
    gdb_test_no_output "set unwindonsignal on"

    gdb_test "p t_char_values(0,0)" " = 0"
    gdb_test "p t_char_values('a','b')" " = 1"
    gdb_test "p t_char_values(char_val1,char_val2)" " = 1"
    gdb_test "p t_char_values('a',char_val2)" " = 1"
    gdb_test "p t_char_values(char_val1,'b')" " = 1"

    gdb_test "p t_short_values(0,0)" " = 0"
    gdb_test "p t_short_values(10,-23)" " = 1"
    gdb_test "p t_short_values(short_val1,short_val2)" " = 1"
    gdb_test "p t_short_values(10,short_val2)" " = 1"
    gdb_test "p t_short_values(short_val1,-23)" " = 1"

    gdb_test "p t_int_values(0,0)" " = 0"
    gdb_test "p t_int_values(87,-26)" " = 1"
    gdb_test "p t_int_values(int_val1,int_val2)" " = 1"
    gdb_test "p t_int_values(87,int_val2)" " = 1"
    gdb_test "p t_int_values(int_val1,-26)" " = 1"

    gdb_test "p t_long_values(0,0)" " = 0"
    gdb_test "p t_long_values(789,-321)" " = 1"
    gdb_test "p t_long_values(long_val1,long_val2)" " = 1"
    gdb_test "p t_long_values(789,long_val2)" " = 1"
    gdb_test "p t_long_values(long_val1,-321)" " = 1"

    if {$allow_float_test} {
	gdb_test "p t_float_values(0.0,0.0)" " = 0"

	# These next four tests fail on the mn10300.
	# The first value is passed in regs, the other in memory.
	# Gcc emits different stabs for the two parameters; the first is
	# claimed to be a float, the second a double.
	# dbxout.c in gcc claims this is the desired behavior.
	# These tests also fail for RealView, because GDB can not tell that
	# the function is unprototyped.
	setup_xfail "mn10300-*-*"
	if { [test_compiler_info "armcc-*"] } { setup_xfail "*-*-*" }
	gdb_test "p t_float_values(3.14159,-2.3765)" " = 1"
	setup_xfail "mn10300-*-*"
	if { [test_compiler_info "armcc-*"] } { setup_xfail "*-*-*" }
	gdb_test "p t_float_values(float_val1,float_val2)" " = 1"
	setup_xfail "mn10300-*-*"
	if { [test_compiler_info "armcc-*"] } { setup_xfail "*-*-*" }
	gdb_test "p t_float_values(3.14159,float_val2)" " = 1"
	setup_xfail "mn10300-*-*"
	if { [test_compiler_info "armcc-*"] } { setup_xfail "*-*-*" }
	gdb_test "p t_float_values(float_val1,-2.3765)" " = 1"
	# Same, via unprototyped function pointer (t_float_values is
	# always unprototyped).
	gdb_test "p ((int (*) ()) t_float_values)(float_val1,-2.3765)" " = 1"

	# Test passing of arguments which might not be widened.
	gdb_test "p t_float_values2(0.0,0.0)" " = 0"
	# Same, via function pointer.
	if {$prototypes} {
	    gdb_test "p ((int (*) (float, float)) t_float_values2)(0.0,0.0)" " = 0"
	} else {
	    gdb_test "p ((int (*) ()) t_float_values2)(0.0,0.0)" " = 0"
	}

	gdb_test "p t_float_values2(3.14159,float_val2)" " = 1"
	if {$prototypes} {
	    gdb_test "p ((int (*) (float, float)) t_float_values2)(3.14159,float_val2)" " = 1"
	} else {
	    gdb_test "p ((int (*) ()) t_float_values2)(3.14159,float_val2)" " = 1"
	}

	gdb_test "p t_float_many_args (float_val1, float_val2, float_val3, float_val4, float_val5, float_val6, float_val7, float_val8, float_val9, float_val10, float_val11, float_val12, float_val13, float_val14, float_val15)" " = 1" "call function with many float arguments."

	gdb_test "p t_small_values(1,2,3,4,5,6,7,8,9,10)" " = 55"

	gdb_test "p t_double_values(0.0,0.0)" " = 0"
	gdb_test "p t_double_values(45.654,-67.66)" " = 1"
	gdb_test "p t_double_values(double_val1,double_val2)" " = 1"
	gdb_test "p t_double_values(45.654,double_val2)" " = 1"
	gdb_test "p t_double_values(double_val1,-67.66)" " = 1"

	gdb_test "p t_double_many_args (double_val1, double_val2, double_val3, double_val4, double_val5, double_val6, double_val7, double_val8, double_val9, double_val10, double_val11, double_val12, double_val13, double_val14, double_val15)" " = 1" "call function with many double arguments."

	gdb_test "p t_double_int(99.0, 1)" " = 0"
	gdb_test "p t_double_int(99.0, 99)" " = 1"
	gdb_test "p t_int_double(99, 1.0)" " = 0"
	gdb_test "p t_int_double(99, 99.0)" " = 1"
    }

    if [support_complex_tests] {
	gdb_test "p t_float_complex_values(fc1, fc2)" " = 1"
	gdb_test "p t_float_complex_values(fc3, fc4)" " = 0"

	gdb_test "p t_float_complex_many_args(fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4, fc1, fc2, fc3, fc4)" " = 1"
	gdb_test "p t_float_complex_many_args(fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1, fc1)" " = 0"

	gdb_test "p t_double_complex_values(dc1, dc2)" " = 1"
	gdb_test "p t_double_complex_values(dc3, dc4)" " = 0"

	gdb_test "p t_double_complex_many_args(dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4, dc1, dc2, dc3, dc4)" " = 1"
	gdb_test "p t_double_complex_many_args(dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1, dc1)" " = 0"

	gdb_test "p t_long_double_complex_values(ldc1, ldc2)" " = 1"
	gdb_test "p t_long_double_complex_values(ldc3, ldc4)" " = 0"
	gdb_test "p t_long_double_complex_many_args(ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4, ldc1, ldc2, ldc3, ldc4)" " = 1"
	gdb_test "p t_long_double_complex_many_args(ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1,ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1, ldc1)" " = 0"
    }

    gdb_test "p t_string_values(string_val2,string_val1)" " = 0"
    gdb_test "p t_string_values(string_val1,string_val2)" " = 1"
    gdb_test "p t_string_values(\"string 1\",\"string 2\")" " = 1"
    gdb_test "p t_string_values(\"string 1\",string_val2)" " = 1"
    gdb_test "p t_string_values(string_val1,\"string 2\")" " = 1"

    gdb_test "p t_char_array_values(char_array_val2,char_array_val1)" " = 0"
    gdb_test "p t_char_array_values(char_array_val1,char_array_val2)" " = 1"
    gdb_test "p t_char_array_values(\"carray 1\",\"carray 2\")" " = 1"
    gdb_test "p t_char_array_values(\"carray 1\",char_array_val2)" " = 1"
    gdb_test "p t_char_array_values(char_array_val1,\"carray 2\")" " = 1"

    gdb_test "p doubleit(4)" " = 8"
    gdb_test "p add(4,5)" " = 9"
    gdb_test "p t_func_values(func_val2,func_val1)" " = 0"
    gdb_test "p t_func_values(func_val1,func_val2)" " = 1"

    gdb_test "p function_struct.func(5)" " = 10"
    gdb_test "p function_struct_ptr->func(10)" " = 20"

    # GDB currently screws up the passing of function parameters for
    # ABIs that use function descriptors.  Instead of passing the
    # address of te function descriptor, GDB passes the address of the
    # function body.  This results in the called function treating the
    # first few instructions of the function proper as a descriptor
    # and attempting a jump through that (a totally random address).
    setup_kfail gdb/1457 "rs6000*-*-aix*"
    setup_kfail gdb/1457 "powerpc*-*-aix*"
    gdb_test "p t_func_values(add,func_val2)" " = 1"
    setup_kfail gdb/1457 "rs6000*-*-aix*"
    setup_kfail gdb/1457 "powerpc*-*-aix*"
    gdb_test "p t_func_values(func_val1,doubleit)" " = 1"
    setup_kfail gdb/1457 "rs6000*-*-aix*"
    setup_kfail gdb/1457 "powerpc*-*-aix*"
    gdb_test "p t_call_add(add,3,4)" " = 7"
    gdb_test "p t_call_add(func_val1,3,4)" " = 7"

    gdb_test "p t_enum_value1(enumval1)" " = 1"
    gdb_test "p t_enum_value1(enum_val1)" " = 1"
    gdb_test "p t_enum_value1(enum_val2)" " = 0"

    gdb_test "p t_enum_value2(enumval2)" " = 1"
    gdb_test "p t_enum_value2(enum_val2)" " = 1"
    gdb_test "p t_enum_value2(enum_val1)" " = 0"

    gdb_test "p sum_args(1,{2})" " = 2"
    gdb_test "p sum_args(2,{2,3})" " = 5"
    gdb_test "p sum_args(3,{2,3,4})" " = 9"
    gdb_test "p sum_args(4,{2,3,4,5})" " = 14"

    gdb_test "p sum10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)" " = 55"

    gdb_test "p cmp10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)" " = 1"

    gdb_test "p t_structs_c(struct_val1)" "= 120 'x'" \
	"call inferior func with struct - returns char"
    gdb_test "p t_structs_s(struct_val1)" "= 87" \
	"call inferior func with struct - returns short"
    gdb_test "p t_structs_i(struct_val1)" "= 76" \
	"call inferior func with struct - returns int"
    gdb_test "p t_structs_l(struct_val1)" "= 51" \
	"call inferior func with struct - returns long"

    if {$allow_float_test} {
	gdb_test "p t_structs_f(struct_val1)" "= 2.12.*" \
	    "call inferior func with struct - returns float"
	gdb_test "p t_structs_d(struct_val1)" "= 9.87.*" \
	    "call inferior func with struct - returns double"
    }

    if [support_complex_tests] {

	gdb_test "p t_structs_fc(struct_val1)" ".*= 3 \\+ 3i" \
	    "call inferior func with struct - returns float _Complex"

	gdb_test "p t_structs_dc(struct_val1)" ".*= 4 \\+ 4i" \
	    "call inferior func with struct - returns double _Complex"

	gdb_test "p t_structs_ldc(struct_val1)" "= 5 \\+ 5i" \
	    "call inferior func with struct - returns long double _Complex"
    }

    gdb_test "p t_structs_a(struct_val1)" "= (.unsigned char .. )?<.*buf.*> \"foo\"" \
    	"call inferior func with struct - returns char *"

    # Restore default value.
    gdb_test_no_output "set unwindonsignal off"
}

# Procedure to get current content of all registers.
proc fetch_all_registers {test} {
    global gdb_prompt

    set all_registers_lines {}
    set bad -1
    # Former trailing `\[\r\n\]+' may eat just \r leaving \n in the buffer
    # corrupting the next matches.
    if {[gdb_test_multiple "info all-registers" $test {
	-re "info all-registers\r\n" {
	    exp_continue
	}
	-ex "The program has no registers now" {
	    set bad 1
	    exp_continue
	}
	-re "^bspstore\[ \t\]+\[^\r\n\]+\r\n" {
	    if [istarget "ia64-*-*"] {
		# Filter out bspstore which is specially tied to bsp,
		# giving spurious differences.
	    } else {
		lappend all_registers_lines $expect_out(0,string)
	    }
	    exp_continue
	}
	-re  "^pstate\[ \t\]+\[^\r\n\]+\r\n" {
	    if [istarget "sparc64-*-linux-gnu"] {
		# Filter out the pstate register, since in sparc64
		# targets the Linux kernel disables pstate.PEF when
		# returning from traps, giving spurious differences.
	    } else {
		lappend all_registers_lines $expect_out(0,string)
	    }
	    exp_continue
	}
	-re "^last_break\[ \t\]+\[^\r\n\]+\r\n" {
	    if [istarget "s390*-*-*"] {
		# Filter out last_break which is read-only,
		# giving spurious differences.
	    } else {
		lappend all_registers_lines $expect_out(0,string)
	    }
	    exp_continue
	}
	-re "^\(?:cycle\|instret\)\[ \t\]+\[^\r\n\]+\r\n" {
	    if [istarget "riscv*-*-*"] {
		# Filter out the cycle counter and instructions
		# retired counter CSRs which are read-only, giving
		# spurious differences.
	    } else {
		lappend all_registers_lines $expect_out(0,string)
	    }
	    exp_continue
	}
	-re "^\[^ \t\]+\[ \t\]+\[^\r\n\]+\r\n" {
	    lappend all_registers_lines $expect_out(0,string)
	    exp_continue
	}
	-re "$gdb_prompt $" {
	    incr bad
	}
	-re "^\[^\r\n\]+\r\n" {
	    if {!$bad} {
		warning "Unrecognized output: $expect_out(0,string)"
		set bad 1
	    }
	    exp_continue
	}
    }] != 0} {
	return {}
    }

    if {$bad} {
	fail $test
	return {}
    }

    pass $test
    return $all_registers_lines
}

# Global used by RERUN_AND_PREPARE to make test names unique.
set rerun_count 0

proc rerun_and_prepare {} {
    global rerun_count

    incr rerun_count
    with_test_prefix "rerun number ${rerun_count}" {

	if { ![runto_main] } {
	    return
	}

	gdb_test_no_output "set language c"

	get_debug_format

	# Make sure that malloc gets called and that the floating
	# point unit is initialized via a call to t_double_values.
	gdb_test "next" \
	    "t_double_values\\(double_val1, double_val2\\);.*" \
	    "next to t_double_values"
	gdb_test "next" "t_structs_c\\(struct_val1\\);.*" \
	    "next to t_structs_c"
    }
}

proc perform_all_tests {prototypes} {
    gdb_test_no_output "set print sevenbit-strings"
    gdb_test_no_output "set print address off"
    gdb_test_no_output "set width 0"

    rerun_and_prepare

    # Save all register contents.
    set old_reg_content \
	[fetch_all_registers "retrieve original register contents 1"]

    # Perform function calls.
    do_function_calls $prototypes

    # Check if all registers still have the same value.
    set new_reg_content [fetch_all_registers \
			     "register contents after gdb function calls"]
    if {$old_reg_content == $new_reg_content} {
	pass "gdb function calls preserve register contents"
    } else {
	set old_reg_content $new_reg_content
	fail "gdb function calls preserve register contents"
    }

    rerun_and_prepare
    # Save all register contents.
    set old_reg_content \
	[fetch_all_registers "retrieve original register contents 2"]

    # Set breakpoint at a function we will call from gdb.
    gdb_breakpoint add

    # Call function (causing a breakpoint hit in the call dummy) and do a continue,
    # make sure we are back at main and still have the same register contents.
    gdb_test "print add(4,5)" \
	"The program being debugged stopped while.*" \
	"stop at breakpoint in call dummy function"
    gdb_test "continue" "Continuing.*" "continue from call dummy breakpoint"
    if ![gdb_test "bt 2" \
	     "#0  main.*" \
	     "bt after continuing from call dummy breakpoint"] then {
		 set new_reg_content [fetch_all_registers \
					  "register contents after stop in call dummy"]
		 if {$old_reg_content == $new_reg_content} {
		     pass "continue after stop in call dummy preserves register contents"
		 } else {
		     fail "continue after stop in call dummy preserves register contents"
		 }
	     }

    rerun_and_prepare
    # Set breakpoint at a function we will call from gdb.
    gdb_breakpoint add
    # Save all register contents.
    set old_reg_content \
	[fetch_all_registers "retrieve original register contents 3"]

    # Call function (causing a breakpoint hit in the call dummy) and do a finish,
    # make sure we are back at main and still have the same register contents.
    gdb_test "print add(4,5)" "The program being debugged stopped while.*" \
	"call function causing a breakpoint then do a finish"
    gdb_test "finish" \
	"Value returned is .* = 9" \
	"finish from call dummy breakpoint returns correct value"
    if ![gdb_test "bt 2" \
	     "#0  main.*" \
	     "bt after finishing from call dummy breakpoint"] then {
		 set new_reg_content [fetch_all_registers \
					  "register contents after finish in call dummy"]
		 if {$old_reg_content == $new_reg_content} {
		     pass "finish after stop in call dummy preserves register contents"
		 } else {
		     fail "finish after stop in call dummy preserves register contents"
		 }
	     }

    rerun_and_prepare
    # Set breakpoint at a function we will call from gdb.
    gdb_breakpoint add
    # Save all register contents.
    set old_reg_content \
	[fetch_all_registers "retrieve original register contents 4"]

    # Call function (causing a breakpoint hit in the call dummy) and do a return
    # with a value, make sure we are back at main with the same register contents.
    gdb_test "print add(4,5)" "The program being debugged stopped while.*" \
	"call function causing a breakpoint and then do a return"
    if ![gdb_test "return 7" \
	     "#0  main.*" \
	     "back at main after return from call dummy breakpoint" \
	     "Make add return now. .y or n.*" \
	     "y"] then {
		 set new_reg_content [fetch_all_registers \
					  "register contents after return in call dummy"]
		 if {$old_reg_content == $new_reg_content} {
		     pass "return after stop in call dummy preserves register contents"
		 } else {
		     fail "return after stop in call dummy preserves register contents"
		 }
	     }

    rerun_and_prepare
    # Set breakpoint at a function we will call from gdb.
    gdb_breakpoint add
    set old_reg_content \
	[fetch_all_registers "retrieve original register contents 5"]

    # Call function (causing a breakpoint hit in the call dummy), and
    # call another function from the call dummy frame (thereby setting up
    # several nested call dummy frames).  Test that backtrace and finish
    # work when several call dummies are nested.
    gdb_breakpoint sum10
    gdb_breakpoint t_small_values
    gdb_test "print add(2,3)" "The program being debugged stopped while.*" \
	"stop at nested call level 1"
    gdb_test "backtrace" \
	"\#0  add \\(a=2, b=3\\).*\#1  <function called from gdb>.*\#2  main.*" \
	"backtrace at nested call level 1"
    gdb_test "print add(4,5)" "The program being debugged stopped while.*" \
	"stop at nested call level 2"
    gdb_test "backtrace" \
	"\#0  add \\(a=4, b=5\\).*\#1  <function called from gdb>.*\#2  add \\(a=2, b=3\\).*\#3  <function called from gdb>.*\#4  main.*" \
	"backtrace at nested call level 2"
    gdb_test "print sum10(2,4,6,8,10,12,14,16,18,20)" \
	"The program being debugged stopped while.*" \
	"stop at nested call level 3"
    gdb_test "backtrace" \
	"\#0  sum10 \\(i0=2, i1=4, i2=6, i3=8, i4=10, i5=12, i6=14, i7=16, i8=18, i9=20\\).*\#1  <function called from gdb>.*\#2  add \\(a=4, b=5\\).*\#3  <function called from gdb>.*\#4  add \\(a=2, b=3\\).*\#5  <function called from gdb>.*\#6  main.*" \
	"backtrace at nested call level 3"
    gdb_test "print t_small_values(1,3,5,7,9,11,13,15,17,19)" \
	"The program being debugged stopped while.*" \
	"stop at nested call level 4"
    gdb_test "backtrace" \
	"\#0  t_small_values \\(arg1=1 '.001', arg2=3, arg3=5, arg4=7 '.a', arg5=9, arg6=11 '.v', arg7=13, arg8=15, arg9=17, arg10=19\\).*\#2  sum10 \\(i0=2, i1=4, i2=6, i3=8, i4=10, i5=12, i6=14, i7=16, i8=18, i9=20\\).*\#3  <function called from gdb>.*\#4  add \\(a=4, b=5\\).*\#5  <function called from gdb>.*\#6  add \\(a=2, b=3\\).*\#7  <function called from gdb>.*\#8  main.*" \
	"backtrace at nested call level 4"
    gdb_test "finish" "Value returned is .* = 100" \
	"Finish from nested call level 4"
    gdb_test "backtrace" \
	"\#0  sum10 \\(i0=2, i1=4, i2=6, i3=8, i4=10, i5=12, i6=14, i7=16, i8=18, i9=20\\).*\#1  <function called from gdb>.*\#2  add \\(a=4, b=5\\).*\#3  <function called from gdb>.*\#4  add \\(a=2, b=3\\).*\#5  <function called from gdb>.*\#6  main.*" \
	"backtrace after finish from nested call level 4"
    gdb_test "finish" "Value returned is .* = 110" \
	"Finish from nested call level 3"
    gdb_test "backtrace" \
	"\#0  add \\(a=4, b=5\\).*\#1  <function called from gdb>.*\#2  add \\(a=2, b=3\\).*\#3  <function called from gdb>.*\#4  main.*" \
	"backtrace after finish from nested call level 3"
    gdb_test "finish" "Value returned is .* = 9" \
	"Finish from nested call level 2"
    gdb_test "backtrace" \
	"\#0  add \\(a=2, b=3\\).*\#1  <function called from gdb>.*\#2  main.*" \
	"backtrace after finish from nested call level 2"
    gdb_test "finish" "Value returned is .* = 5" \
	"Finish from nested call level 1"
    gdb_test "backtrace" "\#0  main .*" \
	"backtrace after finish from nested call level 1"

    set new_reg_content [fetch_all_registers \
			     "register contents after nested call dummies"]
    if {$old_reg_content == $new_reg_content} {
	pass "nested call dummies preserve register contents"
    } else {
	fail "nested call dummies preserve register contents"
    }

    # GDB should not crash by internal error on $sp underflow during the inferior
    # call.  It is OK it will stop on some: Cannot access memory at address 0x$hex.

    if {![target_info exists gdb,nosignals] && ![istarget "*-*-uclinux*"]} {
	gdb_test {set $old_sp = $sp}

	gdb_test {set $sp = 0}
	gdb_test "call doubleit (1)" ".*" "sp == 0: call doubleit (1)"

	gdb_test {set $sp = -1}
	gdb_test "call doubleit (1)" ".*" "sp == -1: call doubleit (1)"

	gdb_test {set $sp = $old_sp}
    }

    # Test function descriptor resolution - the separate debug info .opd section
    # handling vs. local labels `.L'... as `Lcallfunc' starts with `L'.

    gdb_test "print callfunc (Lcallfunc, 5)" " = 12"

    # Regression test for function pointer cast.
    gdb_test "print *((int *(*) (void)) voidfunc)()" " = 23"
}

# Perform all tests with and without function prototypes.

if { ![prepare_for_testing "failed to prepare" $testfile $srcfile "$compile_flags additional_flags=-DPROTOTYPES"] } {
    perform_all_tests 1
}

if { ![prepare_for_testing "failed to prepare" $testfile $srcfile "$compile_flags additional_flags=-DNO_PROTOTYPES"] } {
    with_test_prefix "noproto" {
	perform_all_tests 0
    }
}
