summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>2012-09-24 15:15:14 +0000
committerjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>2012-09-24 15:15:14 +0000
commit1eea6bb03a3d512ceae6d3dcd77255eb73605ba3 (patch)
tree1475f23ff2189fbfb5536bc459198a5fe535abd6
parent1aa7a2663efa3f73c4af9a3a2964d30df5887c83 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/doc/sourcebuild.texi13
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/lib/target-supports-dg.exp60
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]
+ }
}