URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [lib/] [scandump.exp] - Rev 717
Go to most recent revision | Compare with Previous | Blame | View Log
# Copyright (C) 2000, 2002, 2003, 2005, 2007, 2008# 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/>.# Various utilities for scanning dump output, used by gcc-dg.exp and# g++-dg.exp.## This is largely borrowed from scanasm.exp.# Extract the constant part of the dump file suffix from the regexp.# Argument 0 is the regular expression.proc dump-suffix { arg } {set idx [expr [string last "." $arg] + 1]return [string range $arg $idx end]}# Utility for scanning compiler result, invoked via dg-final.# Call pass if pattern is present, otherwise fail.## Argument 0 is the type of dump we are searching (rtl, tree, ipa)# Argument 1 is the regexp to match.# Argument 2 is the suffix for the dump file# Argument 3 handles expected failures and the likeproc scan-dump { args } {if { [llength $args] >= 4 } {switch [dg-process-target [lindex $args 3]] {"S" { }"N" { return }"F" { setup_xfail "*-*-*" }"P" { }}}# This assumes that we are three frames down from dg-test, and that# it still stores the filename of the testcase in a local variable "name".# A cleaner solution would require a new DejaGnu release.upvar 3 name testcaseset suf [dump-suffix [lindex $args 2]]set testname "$testcase scan-[lindex $args 0]-dump $suf \"[lindex $args 1]\""set src [file tail [lindex $testcase 0]]set output_file "[glob -nocomplain $src.[lindex $args 2]]"if { $output_file == "" } {verbose -log "$testcase: dump file does not exist"unresolved "$testname"return}set fd [open $output_file r]set text [read $fd]close $fdif [regexp -- [lindex $args 1] $text] {pass "$testname"} else {fail "$testname"}}# Call pass if pattern is present given number of times, otherwise fail.# Argument 0 is the type of dump we are searching (rtl, tree, ipa)# Argument 1 is the regexp to match.# Argument 2 is number of times the regexp must be found# Argument 3 is the suffix for the dump file# Argument 4 handles expected failures and the likeproc scan-dump-times { args } {if { [llength $args] >= 5 } {switch [dg-process-target [lindex $args 4]] {"S" { }"N" { return }"F" { setup_xfail "*-*-*" }"P" { }}}# This assumes that we are three frames down from dg-test, and that# it still stores the filename of the testcase in a local variable "name".# A cleaner solution would require a new DejaGnu release.upvar 3 name testcaseset suf [dump-suffix [lindex $args 3]]set testname "$testcase scan-[lindex $args 0]-dump-times $suf \"[lindex $args 1]\" [lindex $args 2]"set src [file tail [lindex $testcase 0]]set output_file "[glob -nocomplain $src.[lindex $args 3]]"if { $output_file == "" } {verbose -log "$testcase: dump file does not exist"unresolved "$testname"return}set fd [open $output_file r]set text [read $fd]close $fdif { [llength [regexp -inline -all -- [lindex $args 1] $text]] == [lindex $args 2]} {pass "$testname"} else {fail "$testname"}}# Call pass if pattern is not present, otherwise fail.## Argument 0 is the type of dump we are searching (rtl, tree, ipa)# Argument 1 is the regexp to match.# Argument 2 is the suffix for the dump file# Argument 3 handles expected failures and the likeproc scan-dump-not { args } {if { [llength $args] >= 4 } {switch [dg-process-target [lindex $args 3]] {"S" { }"N" { return }"F" { setup_xfail "*-*-*" }"P" { }}}# This assumes that we are three frames down from dg-test, and that# it still stores the filename of the testcase in a local variable "name".# A cleaner solution would require a new DejaGnu release.upvar 3 name testcaseset suf [dump-suffix [lindex $args 2]]set testname "$testcase scan-[lindex $args 0]-dump-not $suf \"[lindex $args 1]\""set src [file tail [lindex $testcase 0]]set output_file "[glob -nocomplain $src.[lindex $args 2]]"if { $output_file == "" } {verbose -log "$testcase: dump file does not exist"unresolved "$testname"return}set fd [open $output_file r]set text [read $fd]close $fdif ![regexp -- [lindex $args 1] $text] {pass "$testname"} else {fail "$testname"}}# Utility for scanning demangled compiler result, invoked via dg-final.# Call pass if pattern is present, otherwise fail.## Argument 0 is the type of dump we are searching (rtl, tree, ipa)# Argument 1 is the regexp to match.# Argument 2 is the suffix for the dump file# Argument 3 handles expected failures and the likeproc scan-dump-dem { args } {global cxxfiltglobal base_dirif { [llength $args] >= 4 } {switch [dg-process-target [lindex $args 3]] {"S" { }"N" { return }"F" { setup_xfail "*-*-*" }"P" { }}}# Find c++filt like we find g++ in g++.exp.if ![info exists cxxfilt] {set cxxfilt [findfile $base_dir/../../../binutils/cxxfilt \$base_dir/../../../binutils/cxxfilt \[findfile $base_dir/../../c++filt $base_dir/../../c++filt \[findfile $base_dir/c++filt $base_dir/c++filt \[transform c++filt]]]]verbose -log "c++filt is $cxxfilt"}upvar 3 name testcaseset suf [dump-suffix [lindex $args 2]]set testname "$testcase scan-[lindex $args 0]-dump-dem $suf \"[lindex $args 1]\""set src [file tail [lindex $testcase 0]]set output_file "[glob -nocomplain $src.[lindex $args 2]]"if { $output_file == "" } {verbose -log "$testcase: dump file does not exist"unresolved "$testname"return}set fd [open "| $cxxfilt < $output_file" r]set text [read $fd]close $fdif [regexp -- [lindex $args 1] $text] {pass "$testname"} else {fail "$testname"}}# Call pass if demangled pattern is not present, otherwise fail.## Argument 0 is the type of dump we are searching (rtl, tree, ipa)# Argument 1 is the regexp to match.# Argument 2 is the suffix for the dump file# Argument 3 handles expected failures and the likeproc scan-dump-dem-not { args } {global cxxfiltglobal base_dirif { [llength $args] >= 4 } {switch [dg-process-target [lindex $args 3]] {"S" { }"N" { return }"F" { setup_xfail "*-*-*" }"P" { }}}# Find c++filt like we find g++ in g++.exp.if ![info exists cxxfilt] {set cxxfilt [findfile $base_dir/../../../binutils/cxxfilt \$base_dir/../../../binutils/cxxfilt \[findfile $base_dir/../../c++filt $base_dir/../../c++filt \[findfile $base_dir/c++filt $base_dir/c++filt \[transform c++filt]]]]verbose -log "c++filt is $cxxfilt"}upvar 3 name testcaseset suf [dump-suffix [lindex $args 2]]set testname "$testcase scan-[lindex $args 0]-dump-dem-not $suf \"[lindex $args 1]\""set src [file tail [lindex $testcase 0]]set output_file "[glob -nocomplain $src.[lindex $args 2]]"if { $output_file == "" } {verbose -log "$testcase: dump file does not exist"unresolved "$testname"return}set fd [open "| $cxxfilt < $output_file" r]set text [read $fd]close $fdif ![regexp -- [lindex $args 1] $text] {pass "$testname"} else {fail "$testname"}}
Go to most recent revision | Compare with Previous | Blame | View Log
