gcc-you can use this code to learn something about gcc, and inquire further into linux,

源代码在线查看: f-torture.exp

软件大小: 30471 K
上传用户: wwangllei
关键词: something gcc-you further inquire
下载地址: 免注册下载 普通下载 VIP

相关代码

				# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.								# Please email any bugs, comments, and/or additions to this file to:				# bug-dejagnu@gnu.org.								# This file was written by Rob Savoye. (rob@cygnus.com)								# 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 -fomit-frame-pointer -finline-functions -funroll-all-loops } \					{ -O3 -g } \					{ -Os }]				}												# Split TORTURE_OPTIONS into two choices: one for testcases with loops and				# one for testcases without loops.								set torture_with_loops $TORTURE_OPTIONS				set torture_without_loops ""				foreach option $TORTURE_OPTIONS {				    if ![string match "*loop*" $option] {					lappend torture_without_loops $option				    }				}								#				# f-torture-compile -- runs the Tege C-torture test				#				# SRC is the full pathname of the testcase.				# OPTION is the specific compiler flag we're testing (eg: -O2).				#				proc f-torture-compile { src option } {				    global output				    global srcdir tmpdir				    global host_triplet								    set output "$tmpdir/[file tail [file rootname $src]].o"								    regsub "^$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 analyze the results.				    set options ""				    lappend options "additional_flags=-w $option"								    set comp_output [g77_target_compile "$src" "$output" object $options];				    				    # Set a few common compiler messages.				    set fatal_signal "*77*: Internal compiler error: program*got fatal signal"				 				    if [string match "$fatal_signal 6" $comp_output] then {					g77_fail $testcase "Got Signal 6, $option"					remote_file build delete $output					return				    }								    if [string match "$fatal_signal 11" $comp_output] then {					g77_fail $testcase "Got Signal 11, $option"					remote_file build delete $output					return				    }								    # Prune warnings we know are unwanted.				    set comp_output [prune_warnings $comp_output]								    # We shouldn't get these because of -w, but just in case.				    if [string match "*77*:*warning:*" $comp_output] then {					warning "$testcase: (with warnings) $option"					send_log "$comp_output\n"					unresolved "$testcase, $option"					remote_file build delete $output					return				    }								    set unsupported_message [g77_check_unsupported_p $comp_output]				    if { $unsupported_message != "" } {					unsupported "$testcase: $unsupported_message"					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 {					g77_fail $testcase $option					remote_file build delete $output					return				    }								    g77_pass $testcase $option				    remote_file build delete $output				}								#				# f-torture-execute -- utility to 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 f-torture-execute { src } {				    global tmpdir tool srcdir output compiler_conditional_xfail_data								    # 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					}				    }				   				    # 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 $src "do *\[0-9\]"]+[search_for $src "end *do"]] then {					set option_list $torture_with_loops				    } else {					set option_list $torture_without_loops				    }								    set executable $tmpdir/[file tail [file rootname $src].x]								    regsub "^$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]"				    }								    foreach option $option_list {					# torture_{compile,execute}_xfail are set by the .x script					# (if present)					if [info exists torture_compile_xfail] {					    setup_xfail $torture_compile_xfail					}									# torture_execute_before_{compile,execute} can be set by the .x script					# (if present)					if [info exists torture_eval_before_compile] {				            set ignore_me [eval $torture_eval_before_compile]					}									remote_file build delete $executable					verbose "Testing $testcase, $option" 1									set options ""					lappend options "additional_flags=-w $option"					set comp_output [g77_target_compile "$src" "$executable" executable $options];									# Set a few common compiler messages.					set fatal_signal "*77*: Internal compiler error: program*got fatal signal"										if [string match "$fatal_signal 6" $comp_output] then {					    g77_fail $testcase "Got Signal 6, $option"					    remote_file build delete $executable					    continue					}										if [string match "$fatal_signal 11" $comp_output] then {					    g77_fail $testcase "Got Signal 11, $option"					    remote_file build delete $executable					    continue					}										# We shouldn't get these because of -w, but just in case.					if [string match "*77*:*warning:*" $comp_output] then {					    warning "$testcase: (with warnings) $option"					    send_log "$comp_output\n"					    unresolved "$testcase, $option"					    remote_file build delete $executable					    continue					}										set comp_output [prune_warnings $comp_output]										set unsupported_message [g77_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 existance 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"					}									# See if this source file uses "long long" types, if it does, and					# no_long_long is set, skip execution of the test.					if [target_info exists no_long_long] then {					    if [expr [search_for $src "integer\*8"]] then {						untested "$testcase execution, $option"						continue					    }					}									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]					}									set result [g77_load "$executable" "" ""]					set status [lindex $result 0];					set output [lindex $result 1];				        if { $status == "pass" } {					    remote_file build delete $executable				        }					$status "$testcase execution, $option"				    }				}								#				# 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 } {					set lower [string tolower $cur_line]					if [regexp "$pattern" $lower] then {					    close $fd					    return 1					}				    }				    close $fd				    return 0				}								#				# f-torture -- the f-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 f-torture { args } {				    global srcdir subdir compiler_conditional_xfail_data								    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					}				    }				   				    # 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 $src "do *\[0-9\]"]+[search_for $src "end *do"]] then {					set option_list $torture_with_loops				    } else {					set option_list $torture_without_loops				    }								    # loop through all the 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]					}									f-torture-compile $src "$option $options"				    }				}							

相关资源