⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gcc-dg.exp

📁 Mac OS X 10.4.9 for x86 Source Code gcc 实现源代码
💻 EXP
字号:
#   Copyright (C) 1997, 1999, 2000, 2003, 2004, 2005 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 2 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, write to the Free Software# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.load_lib dg.expload_lib file-format.expload_lib target-supports.expload_lib target-supports-dg.expload_lib scanasm.expload_lib scantree.expload_lib prune.expload_lib libgloss.expload_lib target-libpath.exp# We set LC_ALL and LANG to C so that we get the same error messages as expected.setenv LC_ALL Csetenv LANG Cif ![info exists TORTURE_OPTIONS] {    # It is theoretically beneficial to group all of the O2/O3 options together,    # as in many cases the compiler will generate identical executables for    # all of them--and the c-torture testsuite will skip testing identical    # executables multiple times.    # Also note that -finline-functions is explicitly included in one of the    # items below, even though -O3 is also specified, because some ports may    # choose to disable inlining functions by default, even when optimizing.    set TORTURE_OPTIONS [list \	{ -O0 } \	{ -O1 } \	{ -O2 } \	{ -O3 -fomit-frame-pointer } \	{ -O3 -fomit-frame-pointer -funroll-loops } \	{ -O3 -fomit-frame-pointer -funroll-all-loops -finline-functions } \	{ -O3 -g } \	{ -Os } ]}global GCC_UNDER_TESTif ![info exists GCC_UNDER_TEST] {    set GCC_UNDER_TEST "[find_gcc]"}global orig_environment_saved# This file may be sourced, so don't override environment settings# that have been previously setup.if { $orig_environment_saved == 0 } {    append ld_library_path [gcc-set-multilib-library-path $GCC_UNDER_TEST]    set_ld_library_path_env_vars}# Split TORTURE_OPTIONS into two choices: one for testcases with loops and# one for testcases without loops.set torture_with_loops $TORTURE_OPTIONSset torture_without_loops ""foreach option $TORTURE_OPTIONS {    if ![string match "*loop*" $option] {	lappend torture_without_loops $option    }}# Define gcc callbacks for dg.exp.proc gcc-dg-test-1 { target_compile prog do_what extra_tool_flags } {    # Set up the compiler flags, based on what we're going to do.    set options [list]    # Tests should be able to use "dg-do repo".  However, the dg test    # driver checks the argument to dg-do against a list of acceptable    # options, and "repo" is not among them.  Therefore, we resort to    # this ugly approach.    if [string match "*-frepo*" $extra_tool_flags] then {	set do_what "repo"    }    switch $do_what {	"preprocess" {	    set compile_type "preprocess"	    set output_file "[file rootname [file tail $prog]].i"	}	"compile" {	    set compile_type "assembly"	    set output_file "[file rootname [file tail $prog]].s"	}	"assemble" {	    set compile_type "object"	    set output_file "[file rootname [file tail $prog]].o"	}	"precompile" {	    set compile_type "precompiled_header"	    set output_file "[file tail $prog].gch"	}	"link" {	    set compile_type "executable"	    set output_file "[file rootname [file tail $prog]].exe"	    # The following line is needed for targets like the i960 where	    # the default output file is b.out.  Sigh.	}	"repo" {	    set compile_type "object"	    set output_file "[file rootname [file tail $prog]].o"	}	"run" {	    set compile_type "executable"	    # FIXME: "./" is to cope with "." not being in $PATH.	    # Should this be handled elsewhere?	    # YES.	    set output_file "./[file rootname [file tail $prog]].exe"	    # This is the only place where we care if an executable was	    # created or not.  If it was, dg.exp will try to run it.	    remote_file build delete $output_file;	}	default {	    perror "$do_what: not a valid dg-do keyword"	    return ""	}    }    if { $extra_tool_flags != "" } {	lappend options "additional_flags=$extra_tool_flags"    }    set comp_output [$target_compile "$prog" "$output_file" "$compile_type" $options];    if { $do_what == "repo" } {	set object_file "$output_file"	set output_file "[file rootname [file tail $prog]].exe"	set comp_output \	    [ concat $comp_output \		  [$target_compile "$object_file" "$output_file" \		       "executable" $options] ]    }    return [list $comp_output $output_file]}proc gcc-dg-test { prog do_what extra_tool_flags } {    return [gcc-dg-test-1 gcc_target_compile $prog $do_what $extra_tool_flags]}proc gcc-dg-prune { system text } {    global additional_prunes    set text [prune_gcc_output $text]    foreach p $additional_prunes {	if { [string length $p] > 0 } {	    # Following regexp matches a complete line containing $p.	    regsub -all "(^|\n)\[^\n\]*$p\[^\n\]*" $text "" text	}    }    # If we see "region xxx is full" then the testcase is too big for ram.    # This is tricky to deal with in a large testsuite like c-torture so    # deal with it here.  Just mark the testcase as unsupported.    if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $text] {	# The format here is important.  See dg.exp.	return "::unsupported::memory full"    }    return $text}# Utility routines.## search_for -- looks for a string match in a file#proc search_for { file pattern } {    set fd [open $file r]    while { [gets $fd cur_line]>=0 } {	if [string match "*$pattern*" $cur_line] then {	    close $fd	    return 1	}    }    close $fd    return 0}# Modified dg-runtest that can cycle through a list of optimization options# as c-torture does.proc gcc-dg-runtest { testcases default-extra-flags } {    global runtests    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 for a loop within the source code - if we don't find one,	# don't pass -funroll[-all]-loops.	global torture_with_loops torture_without_loops	if [expr [search_for $test "for*("]+[search_for $test "while*("]] {	    set option_list $torture_with_loops	} else {	    set option_list $torture_without_loops	}	set nshort [file tail [file dirname $test]]/[file tail $test]	foreach flags $option_list {	    verbose "Testing $nshort, $flags" 1	    dg-test $test $flags ${default-extra-flags}	}    }}proc gcc-dg-debug-runtest { target_compile trivial opt_opts testcases } {    global srcdir subdir    if ![info exists DEBUG_TORTURE_OPTIONS] {	set DEBUG_TORTURE_OPTIONS ""	foreach type {-gdwarf-2 -gstabs -gstabs+ -gxcoff -gxcoff+ -gcoff} {	    set comp_output [$target_compile \		    "$srcdir/$subdir/$trivial" "trivial.S" assembly \		    "additional_flags=$type"]	    if { ! [string match "*: target system does not support the * debug format*" \		    $comp_output] } {		foreach level {1 "" 3} {		    lappend DEBUG_TORTURE_OPTIONS [list "${type}${level}"]		    foreach opt $opt_opts {			lappend DEBUG_TORTURE_OPTIONS \				[list "${type}${level}" "$opt" ]		    }		}	    }	}    }    verbose -log "Using options $DEBUG_TORTURE_OPTIONS"    global runtests    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	}	set nshort [file tail [file dirname $test]]/[file tail $test]	foreach flags $DEBUG_TORTURE_OPTIONS {	    set doit 1	    if { [string match {*/debug-[126].c} "$nshort"] \		    && [string match "*1" [lindex "$flags" 0] ] } {		set doit 0	    }    # High optimization can remove the variable whose existence is tested.    # Dwarf debugging with commentary (-dA) preserves the symbol name in the    # assembler output, but stabs debugging does not.    # http://gcc.gnu.org/ml/gcc-regression/2003-04/msg00095.html	    if { [string match {*/debug-[12].c} "$nshort"] \		    && [string match "*O*" "$flags"] \		    && ( [string match "*coff*" "$flags"] \			 || [string match "*stabs*" "$flags"] ) } {		set doit 0	    }	    if { $doit } {		verbose -log "Testing $nshort, $flags" 1		dg-test $test $flags ""	    }	}    }}# Prune any messages matching ARGS[1] (a regexp) from test output.proc dg-prune-output { args } {    global additional_prunes    if { [llength $args] != 2 } {	error "[lindex $args 1]: need one argument"	return    }    lappend additional_prunes [lindex $args 1]}# We need to make sure that additional_* are cleared out after every# test.  It is not enough to clear them out *before* the next test run# because gcc-target-compile gets run directly from some .exp files# (outside of any test).  (Those uses should eventually be eliminated.)# Because the DG framework doesn't provide a hook that is run at the# end of a test, we must replace dg-test with a wrapper.if { [info procs saved-dg-test] == [list] } {    rename dg-test saved-dg-test    proc dg-test { args } {	global additional_files	global additional_sources	global additional_prunes	global errorInfo	global compiler_conditional_xfail_data	if { [ catch { eval saved-dg-test $args } errmsg ] } {	    set saved_info $errorInfo	    set additional_files ""	    set additional_sources ""	    set additional_prunes ""	    if [info exists compiler_conditional_xfail_data] {		unset compiler_conditional_xfail_data	    }	    error $errmsg $saved_info	}	set additional_files ""	set additional_sources ""	set additional_prunes ""	if [info exists compiler_conditional_xfail_data] {	    unset compiler_conditional_xfail_data	}    }}set additional_prunes ""

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -