diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/lib/scandump.exp | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/lib/scandump.exp')
-rw-r--r-- | gcc-4.9/gcc/testsuite/lib/scandump.exp | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/lib/scandump.exp b/gcc-4.9/gcc/testsuite/lib/scandump.exp new file mode 100644 index 0000000..b1524d4 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/lib/scandump.exp @@ -0,0 +1,254 @@ +# Copyright (C) 2000-2014 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 like +proc scan-dump { args } { + + if { [llength $args] >= 4 } { + switch [dg-process-target [lindex $args 3]] { + "S" { } + "N" { return } + "F" { setup_xfail "*-*-*" } + "P" { } + } + } + + set testcase [testname-for-summary] + + set printable_pattern [make_pattern_printable [lindex $args 1]] + set suf [dump-suffix [lindex $args 2]] + set testname "$testcase scan-[lindex $args 0]-dump $suf \"$printable_pattern\"" + 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 $fd + + if [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 like +proc scan-dump-times { args } { + + if { [llength $args] >= 5 } { + switch [dg-process-target [lindex $args 4]] { + "S" { } + "N" { return } + "F" { setup_xfail "*-*-*" } + "P" { } + } + } + + set testcase [testname-for-summary] + set suf [dump-suffix [lindex $args 3]] + set printable_pattern [make_pattern_printable [lindex $args 1]] + set testname "$testcase scan-[lindex $args 0]-dump-times $suf \"$printable_pattern\" [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 $fd + + if { [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 like +proc scan-dump-not { args } { + + if { [llength $args] >= 4 } { + switch [dg-process-target [lindex $args 3]] { + "S" { } + "N" { return } + "F" { setup_xfail "*-*-*" } + "P" { } + } + } + + set testcase [testname-for-summary] + set printable_pattern [make_pattern_printable [lindex $args 1]] + set suf [dump-suffix [lindex $args 2]] + set testname "$testcase scan-[lindex $args 0]-dump-not $suf \"$printable_pattern\"" + 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 $fd + + if ![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 like +proc scan-dump-dem { args } { + global cxxfilt + global base_dir + + if { [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" + } + + set testcase [testname-for-summary] + set printable_pattern [make_pattern_printable [lindex $args 1]] + set suf [dump-suffix [lindex $args 2]] + set testname "$testcase scan-[lindex $args 0]-dump-dem $suf \"$printable_pattern\"" + 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 $fd + + if [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 like +proc scan-dump-dem-not { args } { + global cxxfilt + global base_dir + + if { [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" + } + + set testcase [testname-for-summary] + set printable_pattern [make_pattern_printable [lindex $args 1] + set suf [dump-suffix [lindex $args 2]] + set testname "$testcase scan-[lindex $args 0]-dump-dem-not $suf \"$printable_pattern\"" + 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 $fd + + if ![regexp -- [lindex $args 1] $text] { + pass "$testname" + } else { + fail "$testname" + } +} |