global tool
global shouldfail
global set_target_env_var
+ global output-file
set saved_target_env_var [list]
if { [info exists set_target_env_var] \
}
set result [list [lindex $result 0] [prune_file_path [lindex $result 1]]]
+ if { [info exists output-file] && [lindex $result 0] eq "pass" } {
+ if { [lindex ${output-file} 0] eq "F" } {
+ setup_xfail "*-*-*"
+ }
+ set output [lindex $result 1]
+ set idx 0
+ set linenum 1
+ set outfile [open [lindex ${output-file} 1]]
+ set do_fail 0
+ set name [file tail [lindex ${output-file} 1]]
+ verbose "output-file args is $args program is $program" 1
+ while { [gets $outfile line] >= 0 } {
+ if { $linenum != 1 } {
+ set c [string index $output $idx]
+ if { $c eq "\n" } {
+ set idx [expr $idx + 1]
+ } elseif { $c eq "\r" } {
+ set idx [expr $idx + 1]
+ set c [string index $output $idx]
+ if { $c eq "\n" } {
+ set idx [expr $idx + 1]
+ }
+ } else {
+ set do_fail 1
+ fail "$name output file test"
+ send_log "Unexpected character $c on line [expr $linenum - 1] where new-line expected\n"
+ verbose "Failed test for output line [expr $linenum - 1]" 3
+ break
+ }
+ }
+ set len [string length $line]
+ set output_line [string range $output $idx [expr $idx + $len - 1]]
+ if { $line ne $output_line } {
+ set do_fail 1
+ fail "$name output file test"
+ send_log "Output line $linenum was:\n$output_line\nShould match (from [lindex ${output-file} 1]):\n$line\n"
+ verbose "Failed test for output line $linenum $line" 3
+ break
+ }
+ set idx [expr $idx + $len]
+ incr linenum
+ }
+ close $outfile
+ if { $do_fail == 0 } {
+ set c [string index $output $idx]
+ if { $c eq "\n" } {
+ set idx [expr $idx + 1]
+ } elseif { $c eq "\r" } {
+ set idx [expr $idx + 1]
+ set c [string index $output $idx]
+ if { $c eq "\n" } {
+ set idx [expr $idx + 1]
+ }
+ } else {
+ incr linenum -1
+ }
+ set c [string index $output $idx]
+ if { $c ne "" } {
+ fail "$name output file test"
+ send_log "Unexpected character $c on line $linenum where and of output expected\n"
+ verbose "Failed test for output line $linenum" 3
+ break
+ } else {
+ pass "$name output file test"
+ verbose "Passed test for output file [lindex ${output-file} 1]" 3
+ }
+ }
+ unset output
+ }
return $result
}
}
}
}
+# Indicate expected program output in a file.
+#
+proc dg-output-file { args } {
+ global output-file
+ global srcdir subdir
+
+ if { [llength $args] > 3 } {
+ error "[lindex $args 0]: too many arguments"
+ }
+
+ # Allow target dependent output.
+
+ if { ![info exists output-file] } {
+ set output-file "P"
+ }
+ set expected [lindex ${output-file} 0]
+ if { [llength $args] >= 3 } {
+ switch -- [dg-process-target [lindex $args 2]] {
+ "N" { return }
+ "S" { }
+ "F" { set expected "F" }
+ # Don't override a previous xfail.
+ "P" { }
+ }
+ }
+
+ set output-file [list $expected $srcdir/$subdir/[lindex $args 1]]
+}
+
# Utility routines.
#