diff options
author | janis <janis@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-09-24 15:15:14 +0000 |
---|---|---|
committer | janis <janis@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-09-24 15:15:14 +0000 |
commit | 1eea6bb03a3d512ceae6d3dcd77255eb73605ba3 (patch) | |
tree | 1475f23ff2189fbfb5536bc459198a5fe535abd6 | |
parent | 1aa7a2663efa3f73c4af9a3a2964d30df5887c83 (diff) | |
download | gcc-1eea6bb03a3d512ceae6d3dcd77255eb73605ba3.tar.gz |
doc/sourcebuild.texi (Selectors): Document the use of target
and xfail used together.
testsuite/
* lib/target-supports-dg.exp (dg-require-effective-target,
dg-skip-if, dg-xfail-if, dg-xfail-run-if, dg-shouldfail): Call
dg-process-target-1 instead of dg-process-target.
(dg-process-target-1): Rename from dg-process-target.
(dg-process-target): New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191670 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/doc/sourcebuild.texi | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports-dg.exp | 60 |
4 files changed, 66 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f44e5b5e5c0..01536e1f99d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-09-24 Janis Johnson <janisjo@codesourcery.com> + + doc/sourcebuild.texi (Selectors): Document the use of target + and xfail used together. + 2012-09-24 Richard Guenther <rguenther@suse.de> PR middle-end/54632 diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 055567b65d1..2efd7992937 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1238,15 +1238,18 @@ on particular targets. A selector is: @itemize @bullet -@item one or more target triplets, possibly including wildcard characters +@item one or more target triplets, possibly including wildcard characters; +use @samp{*-*-*} to match any target @item a single effective-target keyword (@pxref{Effective-Target Keywords}) @item a logical expression @end itemize -Depending on the -context, the selector specifies whether a test is skipped and reported -as unsupported or is expected to fail. Use @samp{*-*-*} to match any -target. +Depending on the context, the selector specifies whether a test is +skipped and reported as unsupported or is expected to fail. A context +that allows either @samp{target} or @samp{xfail} also allows +@samp{@{ target @var{selector1} xfail @var{selector2} @}} +to skip the test for targets that don't match @var{selector1} and the +test to fail for targets that match @var{selector2}. A selector expression appears within curly braces and uses a single logical operator: one of @samp{!}, @samp{&&}, or @samp{||}. An diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a0b2bdf0ef6..2a38fea6291 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2012-09-24 Janis Johnson <janisjo@codesourcery.com> + + * lib/target-supports-dg.exp (dg-require-effective-target, + dg-skip-if, dg-xfail-if, dg-xfail-run-if, dg-shouldfail): Call + dg-process-target-1 instead of dg-process-target. + (dg-process-target-1): Rename from dg-process-target. + (dg-process-target): New. + 2012-09-24 Richard Guenther <rguenther@suse.de> PR tree-optimization/54684 diff --git a/gcc/testsuite/lib/target-supports-dg.exp b/gcc/testsuite/lib/target-supports-dg.exp index 5ee4b10ca8f..3e3a3d0cea6 100644 --- a/gcc/testsuite/lib/target-supports-dg.exp +++ b/gcc/testsuite/lib/target-supports-dg.exp @@ -208,7 +208,7 @@ proc dg-require-effective-target { args } { # Evaluate selector if present. if { [llength $args] == 2 } { - switch [dg-process-target [lindex $args 1]] { + switch [dg-process-target-1 [lindex $args 1]] { "S" { } "N" { return } } @@ -362,7 +362,7 @@ proc dg-skip-if { args } { } set selector [list target [lindex $args 1]] - if { [dg-process-target $selector] == "S" } { + if { [dg-process-target-1 $selector] == "S" } { if [check-flags $args] { upvar dg-do-what dg-do-what set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] @@ -386,7 +386,7 @@ proc dg-xfail-if { args } { } set selector [list target [lindex $args 1]] - if { [dg-process-target $selector] == "S" } { + if { [dg-process-target-1 $selector] == "S" } { global compiler_conditional_xfail_data # The target list might be an effective-target keyword. Replace @@ -421,7 +421,7 @@ proc dg-xfail-run-if { args } { } set selector [list target [lindex $args 1]] - if { [dg-process-target $selector] == "S" } { + if { [dg-process-target-1 $selector] == "S" } { if [check-flags $args] { upvar dg-do-what dg-do-what set dg-do-what [list [lindex ${dg-do-what} 0] "S" "F"] @@ -445,7 +445,7 @@ proc dg-shouldfail { args } { set args [lreplace $args 0 0] if { [llength $args] > 1 } { set selector [list target [lindex $args 1]] - if { [dg-process-target $selector] == "S" } { + if { [dg-process-target-1 $selector] == "S" } { # The target matches, now check the flags. if [check-flags $args] { set shouldfail 1 @@ -460,16 +460,19 @@ proc dg-shouldfail { args } { # support use of an effective-target keyword in place of a list of # target triplets to xfail or skip a test. # -# selector is one of: -# xfail target-triplet-1 ... -# xfail effective-target-keyword -# xfail selector-expression -# target target-triplet-1 ... -# target effective-target-keyword -# target selector-expression +# The argument to dg-process-target is the keyword "target" or "xfail" +# followed by a selector: +# target-triplet-1 ... +# effective-target-keyword +# selector-expression # # For a target list the result is "S" if the target is selected, "N" otherwise. # For an xfail list the result is "F" if the target is affected, "P" otherwise. + +# In contexts that allow either "target" or "xfail" the argument can be +# target selector1 xfail selector2 +# which returns "N" if selector1 is not selected, otherwise the result of +# "xfail selector2". # # A selector expression appears within curly braces and uses a single logical # operator: !, &&, or ||. An operand is another selector expression, an @@ -529,9 +532,11 @@ if { [info procs saved-dg-process-target] == [list] } { return $answer } - proc dg-process-target { args } { - verbose "replacement dg-process-target: `$args'" 2 - + # Evaluate "target selector" or "xfail selector". + + proc dg-process-target-1 { args } { + verbose "dg-process-target-1: `$args'" 2 + # Extract the 'what' keyword from the argument list. set selector [string trim [lindex $args 0]] if [regexp "^xfail " $selector] { @@ -567,4 +572,29 @@ if { [info procs saved-dg-process-target] == [list] } { # the list of target triplets. return [saved-dg-process-target $selector] } + + # Intercept calls to the DejaGnu function. In addition to + # processing "target selector" or "xfail selector", handle + # "target selector1 xfail selector2". + + proc dg-process-target { args } { + verbose "replacement dg-process-target: `$args'" 2 + + set selector [string trim [lindex $args 0]] + + # If the argument list contains both 'target' and 'xfail', + # process 'target' and, if that succeeds, process 'xfail'. + if [regexp "^target .* xfail .*" $selector] { + set xfail_index [string first "xfail" $selector] + set xfail_selector [string range $selector $xfail_index end] + set target_selector [string range $selector 0 $xfail_index-1] + set target_selector [string trim $target_selector] + if { [dg-process-target-1 $target_selector] == "N" } { + return "N" + } + return [dg-process-target-1 $xfail_selector] + + } + return [dg-process-target-1 $selector] + } } |