testsuite: Allow general skips/requires in PCH tests
dg-pch.exp handled dg-require-effective-target pch_supported_debug as a special case, by grepping the source code. This patch tries to generalise it to other dg-require-effective-targets, and to dg-skip-if. There also seemed to be some errors in check-flags. It used: lappend $args [list <elt>] which treats the contents of args as a variable name. I think it was supposed to be "lappend args" instead. From the later code, the element was supposed to be <elt> itself, rather than a singleton list containing <elt>. We can also save some time by doing the common early-exit first. Doing this removes the need to specify the dg-require-effective-target in both files. Tested by faking unsupported debug and checking that the tests were still correctly skipped. gcc/testsuite/ * lib/target-supports-dg.exp (check-flags): Move default argument handling further up. Fix a couple of issues in the lappends. Avoid frobbing the compiler flags if the return value is already known to be 1. * lib/dg-pch.exp (dg-flags-pch): Process the dg-skip-if and dg-require-effective-target directives to see whether the assembly test should be skipped. * gcc.dg/pch/valid-1.c: Remove dg-require-effective-target. * gcc.dg/pch/valid-1b.c: Likewise.
This commit is contained in:
parent
7006e5d2d7
commit
8a0fceee46
4 changed files with 42 additions and 24 deletions
|
@ -1,4 +1,3 @@
|
|||
/* { dg-require-effective-target pch_supported_debug } */
|
||||
/* { dg-options "-I. -Winvalid-pch -g" } */
|
||||
|
||||
#include "valid-1.h"/* { dg-warning "created with .none. debug info, but used with" } */
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
/* { dg-require-effective-target pch_supported_debug } */
|
||||
/* { dg-options "-I. -Winvalid-pch -g0" } */
|
||||
|
||||
#include "valid-1b.h"
|
||||
|
|
|
@ -100,6 +100,27 @@ proc dg-flags-pch { subdir test otherflags options suffix } {
|
|||
# For the rest, the default is to compile to .s.
|
||||
set dg-do-what-default compile
|
||||
|
||||
# Process the target selectors to see whether the remaining
|
||||
# part of the test should be skipped.
|
||||
#
|
||||
# ??? This doesn't currently handle flag-specific skips,
|
||||
# based on dg-options.
|
||||
set dg-do-what [list compile "" P]
|
||||
set dg-extra-tool-flags ""
|
||||
foreach op [dg-get-options "./$bname$suffix"] {
|
||||
switch [lindex $op 0] {
|
||||
dg-require-effective-target -
|
||||
dg-skip-if {
|
||||
if { [catch "$op" msg] } {
|
||||
perror "$bname$suffix: $msg for \"$op\""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if { [lindex ${dg-do-what} 1] == "N" } {
|
||||
continue
|
||||
}
|
||||
|
||||
set have_errs [llength [grep $test "{\[ \t\]\+dg-error\[ \t\]\+.*\[ \t\]\+}"]]
|
||||
|
||||
if { [ file_on_host exists "$bname$suffix.gch" ] } {
|
||||
|
@ -134,8 +155,7 @@ proc dg-flags-pch { subdir test otherflags options suffix } {
|
|||
fail "$nshort $flags assembly comparison"
|
||||
}
|
||||
}
|
||||
} elseif { $pch_unsupported_debug == 0 \
|
||||
|| [llength [grep $test "{\[ \t\]\+dg-require-effective-target\[ \t\]\+pch_supported_debug\[ \t\]\+.*\[ \t\]\+}"]] > 0 } {
|
||||
} else {
|
||||
verbose -log "pch file '$bname$suffix.gch' missing"
|
||||
fail "$nshort $flags"
|
||||
if { !$have_errs } {
|
||||
|
|
|
@ -334,6 +334,23 @@ proc check-flags { args } {
|
|||
# The args are within another list; pull them out.
|
||||
set args [lindex $args 0]
|
||||
|
||||
# The next two arguments are optional. If they were not specified,
|
||||
# use the defaults.
|
||||
if { [llength $args] == 2 } {
|
||||
lappend args "*"
|
||||
}
|
||||
if { [llength $args] == 3 } {
|
||||
lappend args ""
|
||||
}
|
||||
|
||||
# If the option strings are the defaults, or the same as the
|
||||
# defaults, there is no need to call check_conditional_xfail to
|
||||
# compare them to the actual options.
|
||||
if { [string compare [lindex $args 2] "*"] == 0
|
||||
&& [string compare [lindex $args 3] "" ] == 0 } {
|
||||
return 1
|
||||
}
|
||||
|
||||
# Start the list with a dummy tool name so the list will match "*"
|
||||
# if there are no flags.
|
||||
set compiler_flags " toolname "
|
||||
|
@ -350,26 +367,9 @@ proc check-flags { args } {
|
|||
append compiler_flags "[board_info $dest multilib_flags] "
|
||||
}
|
||||
|
||||
# The next two arguments are optional. If they were not specified,
|
||||
# use the defaults.
|
||||
if { [llength $args] == 2 } {
|
||||
lappend $args [list "*"]
|
||||
}
|
||||
if { [llength $args] == 3 } {
|
||||
lappend $args [list ""]
|
||||
}
|
||||
|
||||
# If the option strings are the defaults, or the same as the
|
||||
# defaults, there is no need to call check_conditional_xfail to
|
||||
# compare them to the actual options.
|
||||
if { [string compare [lindex $args 2] "*"] == 0
|
||||
&& [string compare [lindex $args 3] "" ] == 0 } {
|
||||
set result 1
|
||||
} else {
|
||||
# The target list might be an effective-target keyword, so replace
|
||||
# the original list with "*-*-*", since we already know it matches.
|
||||
set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]]
|
||||
}
|
||||
# The target list might be an effective-target keyword, so replace
|
||||
# the original list with "*-*-*", since we already know it matches.
|
||||
set result [check_conditional_xfail [lreplace $args 1 1 "*-*-*"]]
|
||||
|
||||
# Any value in this variable was left over from an earlier test.
|
||||
set compiler_flags ""
|
||||
|
|
Loading…
Add table
Reference in a new issue