https://gcc.gnu.org/g:de13ec46e3ab89068510b24b4928ed99304527b3
commit r16-5765-gde13ec46e3ab89068510b24b4928ed99304527b3 Author: Jose E. Marchesi <[email protected]> Date: Sat Oct 11 19:56:00 2025 +0200 a68: testsuite: infrastructure Signed-off-by: Jose E. Marchesi <[email protected]> gcc/testsuite/ChangeLog * lib/algol68-dg.exp: New file. * lib/algol68-torture.exp: Likewise. * lib/algol68.exp: Likewise. Diff: --- gcc/testsuite/lib/algol68-dg.exp | 96 +++++++ gcc/testsuite/lib/algol68-torture.exp | 483 ++++++++++++++++++++++++++++++++++ gcc/testsuite/lib/algol68.exp | 219 +++++++++++++++ 3 files changed, 798 insertions(+) diff --git a/gcc/testsuite/lib/algol68-dg.exp b/gcc/testsuite/lib/algol68-dg.exp new file mode 100644 index 000000000000..5dcfb517c249 --- /dev/null +++ b/gcc/testsuite/lib/algol68-dg.exp @@ -0,0 +1,96 @@ +# Copyright (C) 1997-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 GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +load_lib gcc-dg.exp + +# Define ALGOL68 callbacks for dg.exp. + +proc algol68-dg-test { prog do_what extra_tool_flags } { + return [gcc-dg-test-1 algol68_target_compile $prog $do_what $extra_tool_flags] +} + +proc algol68-dg-prune { system text } { + return [gcc-dg-prune $system $text] +} + +# Global modules options +set MODULES_OPTIONS "" + +# Modified dg-runtest that can cycle through a list of optimization options +# as c-torture does. +proc algol68-dg-runtest { testcases flags default-extra-flags } { + global runtests + global TORTURE_OPTIONS + global MODULES_OPTIONS + + foreach test $testcases { + # If we're only testing specific files and this isn't one of + # them, skip it. + if ![runtest_file_p $runtests $test] { + continue + } + + # look if this is dg-do-run test, in which case + # we cycle through the option list, otherwise we don't + if [expr [search_for $test "dg-do run"]] { + set option_list $TORTURE_OPTIONS + } else { + set option_list [list { -O2 } ] + } + + set nshort [file tail [file dirname $test]]/[file tail $test] + + foreach flags_t $option_list { + verbose "Testing $nshort, $flags $flags_t" 1 + dg-test $test "$MODULES_OPTIONS $flags $flags_t" ${default-extra-flags} + } + } +} + +# Build a series of modules ACCESSed by this test. +# +# The first to dg-modules is a list of module names. The source file +# for a given module MODULE is assumed to be MODULE.a68, and that file +# must reside in the current directory. +# +# The second option to dg-modules, which is optional, can be used to +# specify additional options to be passed to ga68 when it compiles the +# modules. + +proc dg-modules { args } { + + global objdir + global srcdir + global subdir + + if { [llength $args] != 2 && [llength $args] != 3 } { + error "[lindex $args 0]: invalid arguments" + } + set modules [lindex $args 1] + + set module_options {} + if { [llength $args] == 3 } { + set module_options [lindex $args 2] + } + + foreach module $modules { + set srcfile "${module}.a68" + set objfile "${module}.o" + # Compile the module + set comp_output [algol68_target_compile $srcdir/$subdir/$srcfile \ + $objdir/$objfile object $module_options] + } +} diff --git a/gcc/testsuite/lib/algol68-torture.exp b/gcc/testsuite/lib/algol68-torture.exp new file mode 100644 index 000000000000..6da563687d4e --- /dev/null +++ b/gcc/testsuite/lib/algol68-torture.exp @@ -0,0 +1,483 @@ +# Copyright (C) 2009-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 GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# Please email any bugs, comments, and/or additions to this file to +# the author. + +load_lib dg.exp + +load_lib target-supports.exp + +load_lib target-utils.exp + +# The default option list can be overridden by +# TORTURE_OPTIONS="{ { list1 } ... { listN } }" + +if ![info exists TORTURE_OPTIONS] { + set TORTURE_OPTIONS [list \ + { -O0 } { -O1 } { -O2 } \ + { -O2 -fomit-frame-pointer -finline-functions } \ + { -O2 -fomit-frame-pointer -finline-functions -funroll-loops } \ + { -O2 -fcheck=bounds } \ + { -O2 -fcheck=nil } \ + { -O3 -g } \ + { -Os }] + + if [check_effective_target_lto] { + set TORTURE_OPTIONS \ + [concat $TORTURE_OPTIONS [list {-flto}]] + } +} + +# Location of built modules +set BUILT_MODULES_DIR "" + +# Build a series of modules ACCESSed by this test. +# +# The first to dg-modules is a list of module names. The source file +# for a given module MODULE is assumed to be MODULE.a68, and that file +# must reside in the current directory. +# +# The second option to dg-modules, which is optional, can be used to +# specify additional options to be passed to ga68 when it compiles the +# modules. + +proc dg-modules { args } { + + global objdir + global srcdir + global subdir + global algol68_module_objects + + if { [llength $args] != 2 && [llength $args] != 3 } { + error "[lindex $args 0]: invalid arguments" + } + set modules [lindex $args 1] + + set module_options {} + if { [llength $args] == 3 } { + set module_options [lindex $args 2] + } + + foreach module $modules { + set srcfile "${module}.a68" + set objfile "${module}.o" + # Compile the module + set comp_output [algol68_target_compile $srcdir/$subdir/$srcfile \ + $objdir/$objfile object $module_options] + lappend algol68_module_objects $objfile + } +} + +# +# algol68-torture-compile -- compile an algol68/execute/torture testcase. +# +# SRC is the full pathname of the testcase. +# OPTION is the specific compiler flag we're testing (eg: -O2). +# +proc algol68-torture-compile { src option } { + global output + global srcdir tmpdir + global host_triplet + + set output "$tmpdir/[file tail [file rootname $src]].o" + + regsub "(?q)$srcdir/" $src "" testcase + + # If we couldn't rip $srcdir out of `src' then just do the best we can. + # The point is to reduce the unnecessary noise in the logs. Don't strip + # out too much because different testcases with the same name can confuse + # `test-tool'. + if [string match "/*" $testcase] { + set testcase "[file tail [file dirname $src]]/[file tail $src]" + } + + verbose "Testing $testcase, $option" 1 + + # Run the compiler and get results in comp_output. + set options "" + lappend options "additional_flags=-w $option" + + set comp_output [algol68_target_compile "$src" "$output" object $options] + + # See if we got something bad. + set fatal_signal "*algol68*: Internal compiler error: program*got fatal signal" + + if [string match "$fatal_signal 6" $comp_output] then { + algol68_fail $testcase "Got Signal 6, $option" + catch { remote_file build delete $output } + return + } + + if [string match "$fatal_signal 11" $comp_output] then { + algol68_fail $testcase "Got Signal 11, $option" + catch { remote_file build delete $output } + return + } + + if [regexp -line -- "internal compiler error.*" $comp_output ice] then { + algol68_fail $testcase "$option ($ice)" + catch { remote_file build delete $output } + return + } + + # We shouldn't get these because of -w, but just in case. + if [string match "*algol68*:*warning:*" $comp_output] then { + warning "$testcase: (with warnings) $option" + send_log "$comp_output\n" + unresolved "$testcase, $option" + catch { remote_file build delete $output } + return + } + + # Prune warnings we know are unwanted. + set comp_output [prune_warnings $comp_output] + + # Report if the testcase is not supported. + set unsupported_message [algol68_check_unsupported_p $comp_output] + if { $unsupported_message != "" } { + unsupported "$testcase: $unsupported_message" + catch { remote_file build delete $output } + return + } + + # remove any leftover LF/CR to make sure any output is legit + regsub -all -- "\[\r\n\]*" $comp_output "" comp_output + + # If any message remains, we fail. + if ![string match "" $comp_output] then { + algol68_fail $testcase $option + catch { remote_file build delete $output } + return + } + + algol68_pass $testcase $option + catch { remote_file build delete $output } +} + + +# +# algol68-torture-execute -- compile and execute a testcase. +# +# SRC is the full pathname of the testcase. +# +# If the testcase has an associated .x file, we source that to run the +# test instead. We use .x so that we don't lengthen the existing filename +# to more than 14 chars. +# +proc algol68-torture-execute { src } { + global output + global srcdir tmpdir + global tool + global compiler_conditional_xfail_data + global TORTURE_OPTIONS + global BUILT_MODULES_DIR + global errorCode errorInfo + global algol68_module_objects + global algol68_compile_args + global algol68_execute_args + global dg-extra-tool-flags + + set dg-excess-errors-flag 0 + set dg-messages "" + set dg-extra-tool-flags "" + set dg-final-code "" + + # `dg-output-text' is a list of two elements: pass/fail and text. + # Leave second element off for now (indicates "don't perform test") + set dg-output-text "P" + + # The list of module objects to include in the compilation line + # is built by dg-get-options while processing the { dg-modules } + # marks. See the dg-modules procedure above. + set algol68_module_objects "" + + set tmp [dg-get-options $src] + foreach op $tmp { + verbose "Processing option: $op" 3 + set status [catch $op errmsg] + if { $status != 0 } { + if { 0 && [info exists errorInfo] } { + # This also prints a backtrace which will just confuse + # testcase writers, so it's disabled. + perror "$src: $errorInfo\n" + } else { + perror "$src: $errmsg for \"$op\"\n" + } + perror "$src: $errmsg for \"$op\"" 0 + return + } + } + + # Check for alternate driver. + set additional_flags "" + if [file exists [file rootname $src].x] { + verbose "Using alternate driver [file rootname [file tail $src]].x" 2 + set done_p 0 + catch "set done_p \[source [file rootname $src].x\]" + if { $done_p } { + return + } + } + + # Setup the options for the testcase run. + set option_list $TORTURE_OPTIONS + set executable $tmpdir/[file tail [file rootname $src].x] + regsub "(?q)$srcdir/" $src "" testcase + + if { ! [info exists algol68_compile_args] } { + set algol68_compile_args "" + } + if { ! [info exists algol68_execute_args] } { + set algol68_execute_args "" + } + + # If we couldn't rip $srcdir out of `src' then just do the best we can. + # The point is to reduce the unnecessary noise in the logs. Don't strip + # out too much because different testcases with the same name can confuse + # `test-tool'. + if [string match "/*" $testcase] { + set testcase "[file tail [file dirname $src]]/[file tail $src]" + } + + # Walk the list of options and compile and run the testcase for all + # options that are not explicitly disabled by the .x script (if present). + foreach option $option_list { + + # Torture_{compile,execute}_xfail are set by the .x script. + if [info exists torture_compile_xfail] { + setup_xfail $torture_compile_xfail + } + + # Torture_execute_before_{compile,execute} can be set by the .x script. + if [info exists torture_eval_before_compile] { + set ignore_me [eval $torture_eval_before_compile] + } + + # FIXME: We should make sure that the modules required by this testcase + # exist. If not, the testcase should XFAIL. + + # Compile the testcase. + catch { remote_file build delete $executable } + verbose "Testing $testcase, $option" 1 + + set options "" + lappend options "additional_flags=-w $option" + if { ${dg-extra-tool-flags} != "" } { + lappend options "additional_flags=${dg-extra-tool-flags}" + } + if { $additional_flags != "" } { + lappend options "additional_flags=$additional_flags" + } + if { $algol68_compile_args != "" } { + lappend options "additional_flags=$algol68_compile_args" + } + if { $BUILT_MODULES_DIR != "" } { + lappend options "additional_flags=-I$BUILT_MODULES_DIR" + } + if { $algol68_module_objects != "" } { + lappend options "additional_flags=$algol68_module_objects" + } + set comp_output [algol68_target_compile "$src" "$executable" executable $options] + + # See if we got something bad. + set fatal_signal "*algol68*: Internal compiler error: program*got fatal signal" + + if [string match "$fatal_signal 6" $comp_output] then { + algol68_fail $testcase "Got Signal 6, $option" + catch { remote_file build delete $executable } + continue + } + + if [string match "$fatal_signal 11" $comp_output] then { + algol68_fail $testcase "Got Signal 11, $option" + catch { remote_file build delete $executable } + continue + } + + if [regexp -line -- "internal compiler error.*" $comp_output ice] then { + algol68_fail $testcase "$option ($ice)" + catch { remote_file build delete $executable } + continue + } + + # We shouldn't get these because of -w, but just in case. + if [string match "*algol68*:*warning:*" $comp_output] then { + warning "$testcase: (with warnings) $option" + send_log "$comp_output\n" + unresolved "$testcase, $option" + catch { remote_file build delete $executable } + continue + } + + # Prune warnings we know are unwanted. + set comp_output [prune_warnings $comp_output] + + # Report if the testcase is not supported. + set unsupported_message [algol68_check_unsupported_p $comp_output] + if { $unsupported_message != "" } { + unsupported "$testcase: $unsupported_message" + continue + } elseif ![file exists $executable] { + if ![is3way] { + fail "$testcase compilation, $option" + untested "$testcase execution, $option" + continue + } else { + # FIXME: since we can't test for the existence of a remote + # file without short of doing an remote file list, we assume + # that since we got no output, it must have compiled. + pass "$testcase compilation, $option" + } + } else { + pass "$testcase compilation, $option" + } + + if [info exists torture_execute_xfail] { + setup_xfail $torture_execute_xfail + } + + if [info exists torture_eval_before_execute] { + set ignore_me [eval $torture_eval_before_execute] + } + + # Run the testcase, and analyse the output. + set result [algol68_load "$executable" "$algol68_execute_args" ""] + set status [lindex $result 0] + set output [lindex $result 1] + if { $status eq "pass" } { + pass "$testcase execution test, $option" + verbose "Exec succeeded." 3 + if { [llength ${dg-output-text}] > 1 } { + if { [lindex ${dg-output-text} 0] eq "F" } { + setup_xfail "*-*-*" + } + set texttmp [lindex ${dg-output-text} 1] + if { ![regexp -- $texttmp $output] } { + fail "$testcase output pattern test, $option" + send_log "Output was:\n${output}\nShould match:\n$texttmp\n" + verbose "Failed test for output pattern $texttmp" 3 + } else { + pass "$testcase output pattern test, $option" + verbose "Passed test for output pattern $texttmp" 3 + } + unset texttmp + } + } elseif { $status eq "fail" } { + if {[info exists errorCode]} { + verbose "Exec failed, errorCode: $errorCode" 3 + } else { + verbose "Exec failed, errorCode not defined!" 3 + } + fail "$testcase execution test, $option" + } else { + $status "$testcase execution, $option" + } + catch { remote_file build delete $executable } + } +} + + +# +# search_for_re -- looks for a string match in a file +# +proc search_for_re { file pattern } { + set fd [open $file r] + while { [gets $fd cur_line]>=0 } { + set lower [string tolower $cur_line] + if [regexp "$pattern" $lower] then { + close $fd + return 1 + } + } + close $fd + return 0 +} + + +# +# algol68-torture -- the algol68-torture testcase source file processor +# +# This runs compilation only tests (no execute tests). +# +# SRC is the full pathname of the testcase, or just a file name in which +# case we prepend $srcdir/$subdir. +# +# If the testcase has an associated .x file, we source that to run the +# test instead. We use .x so that we don't lengthen the existing filename +# to more than 14 chars. +# +proc algol68-torture { args } { + global srcdir subdir + global compiler_conditional_xfail_data + global TORTURE_OPTIONS + + set src [lindex $args 0] + if { [llength $args] > 1 } { + set options [lindex $args 1] + } else { + set options "" + } + + # Prepend $srdir/$subdir if missing. + if ![string match "*/*" $src] { + set src "$srcdir/$subdir/$src" + } + + # Check for alternate driver. + if [file exists [file rootname $src].x] { + verbose "Using alternate driver [file rootname [file tail $src]].x" 2 + set done_p 0 + catch "set done_p \[source [file rootname $src].x\]" + if { $done_p } { + return + } + } + + # loop through all the options + set option_list $TORTURE_OPTIONS + foreach option $option_list { + + # torture_compile_xfail is set by the .x script (if present) + if [info exists torture_compile_xfail] { + setup_xfail $torture_compile_xfail + } + + # torture_execute_before_compile is set by the .x script (if present) + if [info exists torture_eval_before_compile] { + set ignore_me [eval $torture_eval_before_compile] + } + + algol68-torture-compile $src "$option $options" + } +} + +# +# add-ieee-options -- add options necessary for 100% ieee conformance. +# +proc add-ieee-options { } { + # Ensure that excess precision does not cause problems. + if { [istarget i?86-*-*] + || [istarget m68k-*-*] } then { + uplevel 1 lappend additional_flags "-ffloat-store" + } + + # Enable full IEEE compliance mode. + if { [istarget alpha*-*-*] + || [istarget sh*-*-*] } then { + uplevel 1 lappend additional_flags "-mieee" + } +} diff --git a/gcc/testsuite/lib/algol68.exp b/gcc/testsuite/lib/algol68.exp new file mode 100644 index 000000000000..a7a0090aa760 --- /dev/null +++ b/gcc/testsuite/lib/algol68.exp @@ -0,0 +1,219 @@ +# Copyright (C) 2012-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 GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# +# ALGOL68 support library routines +# + +load_lib prune.exp +load_lib gcc-defs.exp +load_lib timeout.exp +load_lib target-libpath.exp + +# +# ALGOL68_UNDER_TEST is the compiler under test. +# + +set algol68_compile_options "" + + +# +# algol68_include_flags -- include flags for the gcc tree structure +# + +proc algol68_include_flags { paths } { + global srcdir + global TESTING_IN_BUILD_TREE + + set flags "" + + if { [is_remote host] || ![info exists TESTING_IN_BUILD_TREE] } { + return "${flags}" + } + + set gccpath ${paths} + + return "$flags" +} + +# +# algol68_link_flags -- linker flags for the gcc tree structure +# + +proc algol68_link_flags { paths } { + global srcdir + global ld_library_path + global shlib_ext + global SHARED_OPTION + global ALGOL68_UNDER_TEST + + set gccpath ${paths} + set libio_dir "" + set flags "" + set ld_library_path "." + set shlib_ext [get_shlib_extension] + set SHARED_OPTION "" + verbose "shared lib extension: $shlib_ext" + + # We need to add options to locate libga68. + set target_wants_B_option 0 + if { [istarget *-*-darwin9* ] || [istarget *-*-darwin\[12\]* ] } { + set target_wants_B_option 1 + } + + if { $gccpath != "" } { + # Path to libga68.spec. + append flags "-B${gccpath}/libga68 " + if { [file exists "${gccpath}/libga68/.libs/libga68.a"] \ + || [file exists "${gccpath}/libga68/.libs/libga68.${shlib_ext}"] } { + if { $target_wants_B_option } { + append flags "-B${gccpath}/libga68/.libs " + } else { + append flags "-L${gccpath}/libga68/.libs " + } + append ld_library_path ":${gccpath}/libga68/.libs" + } + # Static linking is default. If only the shared lib is available adjust + # flags to always use it. If both are available, set SHARED_OPTION which + # will be added to PERMUTE_ARGS + if { [file exists "${gccpath}/libga68/src/.libs/libga68.${shlib_ext}"] } { + if { [file exists "${gccpath}/libga68/src/.libs/libga68.a"] } { + set SHARED_OPTION "-shared-libga68" + } else { +# append flags "-shared-libga68 " + } + } + if [file exists "${gccpath}/libiberty/libiberty.a"] { + append flags "-L${gccpath}/libiberty " + } + append ld_library_path [gcc-set-multilib-library-path $ALGOL68_UNDER_TEST] + } + + set_ld_library_path_env_vars + + return "$flags" +} + +# +# algol68_init -- called at the start of each subdir of tests +# + +proc algol68_init { args } { + global subdir + global algol68_initialized + global base_dir + global tmpdir + global libdir + global gluefile wrap_flags + global objdir srcdir + global ALWAYS_ALGOL68FLAGS + global TOOL_EXECUTABLE TOOL_OPTIONS + global ALGOL68_UNDER_TEST + global TESTING_IN_BUILD_TREE + global gcc_warning_prefix + global gcc_error_prefix + + # We set LC_ALL and LANG to C so that we get the same error messages as expected. + setenv LC_ALL C + setenv LANG C + + if ![info exists ALGOL68_UNDER_TEST] then { + if [info exists TOOL_EXECUTABLE] { + set ALGOL68_UNDER_TEST $TOOL_EXECUTABLE + } else { + if { [is_remote host] || ! [info exists TESTING_IN_BUILD_TREE] } { + set ALGOL68_UNDER_TEST [transform ga68] + } else { + set ALGOL68_UNDER_TEST [findfile $base_dir/../../ga68 "$base_dir/../../ga68 -B$base_dir/../../" [findfile $base_dir/ga68 "$base_dir/ga68 -B$base_dir/" [transform ga68]]] + } + } + } + + if ![is_remote host] { + if { [which $ALGOL68_UNDER_TEST] == 0 } then { + perror "ALGOL68_UNDER_TEST ($ALGOL68_UNDER_TEST) does not exist" + exit 1 + } + } + + if ![info exists tmpdir] { + set tmpdir "/tmp" + } + + if [info exists gluefile] { + unset gluefile + } + + set gcc_warning_prefix "warning:" + set gcc_error_prefix "(fatal )?error:" + + verbose "algol68 is initialized" 3 +} + +# +# algol68_target_compile -- compile a source file +# + +proc algol68_target_compile { source dest type options } { + global tmpdir + global gluefile wrap_flags + global ALWAYS_ALGOL68FLAGS + global ALGOL68_UNDER_TEST + global individual_timeout + global TEST_ALWAYS_FLAGS + + # HACK: guard against infinite loops in the compiler + set individual_timeout 20 + + if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } { + lappend options "libs=${gluefile}" + lappend options "ldflags=${wrap_flags}" + } + + set ALWAYS_ALGOL68FLAGS "" + + # TEST_ALWAYS_FLAGS are flags that should be passed to every + # compilation. They are passed first to allow individual + # tests to override them. + if [info exists TEST_ALWAYS_FLAGS] { + lappend ALWAYS_ALGOL68FLAGS "additional_flags=$TEST_ALWAYS_FLAGS" + } + + if ![is_remote host] { + if [info exists TOOL_OPTIONS] { + lappend ALWAYS_ALGOL68FLAGS "additional_flags=[algol68_include_flags [get_multilibs ${TOOL_OPTIONS}] ]" + lappend ALWAYS_ALGOL68FLAGS "ldflags=[algol68_link_flags [get_multilibs ${TOOL_OPTIONS}] ]" + } else { + lappend ALWAYS_ALGOL68FLAGS "additional_flags=[algol68_include_flags [get_multilibs] ]" + lappend ALWAYS_ALGOL68FLAGS "ldflags=[algol68_link_flags [get_multilibs] ]" + } + } + + if [info exists TOOL_OPTIONS] { + lappend ALWAYS_ALGOL68FLAGS "additional_flags=$TOOL_OPTIONS" + } + + verbose -log "ALWAYS_ALGOL68FLAGS set to $ALWAYS_ALGOL68FLAGS" + + lappend options "timeout=[timeout_value]" + lappend options "compiler=$ALGOL68_UNDER_TEST" + + set options [concat "$ALWAYS_ALGOL68FLAGS" $options] + set options [dg-additional-files-options $options $source $dest $type] + set ret [target_compile $source $dest $type $options] + unset individual_timeout + return $ret +}
