Commit 8d2d2ec6 by Janis Johnson Committed by Janis Johnson

sourcebuild.texi (Test directives): Describe selector expressions.

	* doc/sourcebuild.texi (Test directives): Describe selector
	expressions.

	* lib/gcc-dg.exp (selector_opd, selector_list, selector_expression):
	New procs.
	(dg-process-target (local override)): Handle selector expressions.

From-SVN: r94551
parent 91442c20
2005-02-01 Janis Johnson <janis187@us.ibm.com>
* doc/sourcebuild.texi (Test directives): Describe selector
expressions.
2005-02-01 Segher Boessenkool <segher@kernel.crashing.org> 2005-02-01 Segher Boessenkool <segher@kernel.crashing.org>
* config.gcc (powerpc64-*-linux*): Default to -m64 also for * config.gcc (powerpc64-*-linux*): Default to -m64 also for
......
...@@ -919,17 +919,26 @@ DejaGnu directives, which know nothing about the GCC directives, so the ...@@ -919,17 +919,26 @@ DejaGnu directives, which know nothing about the GCC directives, so the
DejaGnu directives must precede GCC directives. DejaGnu directives must precede GCC directives.
Several test directives include selectors which are usually preceded by Several test directives include selectors which are usually preceded by
the keyword @code{target} or @code{xfail}. A selector is one or the keyword @code{target} or @code{xfail}. A selector is: one or more
more target triplets, possibly including wildcard characters, or else a target triplets, possibly including wildcard characters; a single
single effective-target keyword. Depending on the context, the selector effective-target keyword; or a logical expression. Depending on the
specifies whether a test is skipped and reported as unsupported or is context, the selector specifies whether a test is skipped and reported
expected to fail. Use @samp{*-*-*} to match any target. as unsupported or is expected to fail. Use @samp{*-*-*} to match any
target.
Effective-target keywords are defined in @file{target-supports.exp} in Effective-target keywords are defined in @file{target-supports.exp} in
the GCC testsuite or, in the case of unusual effective targets that are the GCC testsuite.
used only for a limited number of tests, in @file{.exp} files in the
same directory as the tests. There is no mechanism to combine or negate A selector expression appears within curly braces and uses a single
effective-target keywords. logical operator: one of @option{!}, @option{&&}, or @option{||}. An
operand is another selector expression, an effective-target keyword,
a single target triplet, or a list of target triplets within quotes or
curly braces. For example:
@smallexample
@{ target @{ ! "hppa*-*-* ia64*-*-*" @} @}
@{ target @{ powerpc*-*-* && lp64 @} @}
@{ xfail @{ lp64 || vect_no_align @} @}
@end smallexample
@table @code @table @code
@item @{ dg-do @var{do-what-keyword} [@{ target/xfail @var{selector} @}] @} @item @{ dg-do @var{do-what-keyword} [@{ target/xfail @var{selector} @}] @}
......
2005-02-01 Janis Johnson <janis187@us.ibm.com> 2005-02-01 Janis Johnson <janis187@us.ibm.com>
* lib/gcc-dg.exp (selector_opd, selector_list, selector_expression):
New procs.
(dg-process-target (local override)): Handle selector expressions.
* gcc.test-framework/README: Describe tests in source directory. * gcc.test-framework/README: Describe tests in source directory.
* gcc.test-framework/test-framework.awk: Handle dg- tests. * gcc.test-framework/test-framework.awk: Handle dg- tests.
* gcc.test-framework/test-framework.exp: Handle dg- tests. * gcc.test-framework/test-framework.exp: Handle dg- tests.
......
...@@ -522,17 +522,74 @@ if { [info procs saved-dg-test] == [list] } { ...@@ -522,17 +522,74 @@ if { [info procs saved-dg-test] == [list] } {
# selector is one of: # selector is one of:
# xfail target-triplet-1 ... # xfail target-triplet-1 ...
# xfail effective-target-keyword # xfail effective-target-keyword
# xfail selector-expression
# target target-triplet-1 ... # target target-triplet-1 ...
# target effective-target-keyword # target effective-target-keyword
# target selector-expression
# #
# For a target list the result is "S" if the target is selected, "N" otherwise. # 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. # For an xfail list the result is "F" if the target is affected, "P" otherwise.
#
# A selector expression appears within curly braces and uses a single logical
# operator: !, &&, or ||. An operand is another selector expression, an
# effective-target keyword, or a list of target triplets within quotes or
# curly braces.
if { [info procs saved-dg-process-target] == [list] } { if { [info procs saved-dg-process-target] == [list] } {
rename dg-process-target saved-dg-process-target rename dg-process-target saved-dg-process-target
# Evaluate an operand within a selector expression.
proc selector_opd { op } {
set selector "target"
lappend selector $op
set answer [ expr { [dg-process-target $selector] == "S" } ]
verbose "selector_opd: `$op' $answer" 2
return $answer
}
# Evaluate a target triplet list within a selector expression.
# Unlike other operands, this needs to be expanded from a list to
# the same string as "target".
proc selector_list { op } {
set selector "target [join $op]"
set answer [ expr { [dg-process-target $selector] == "S" } ]
verbose "selector_list: `$op' $answer" 2
return $answer
}
# Evaluate a selector expression.
proc selector_expression { exp } {
if { [llength $exp] == 2 } {
if [string match "!" [lindex $exp 0]] {
set op1 [lindex $exp 1]
set answer [expr { ! [selector_opd $op1] }]
} else {
# Assume it's a list of target triplets.
set answer [selector_list $exp]
}
} elseif { [llength $exp] == 3 } {
set op1 [lindex $exp 0]
set opr [lindex $exp 1]
set op2 [lindex $exp 2]
if [string match "&&" $opr] {
set answer [expr { [selector_opd $op1] && [selector_opd $op2] }]
} elseif [string match "||" $opr] {
set answer [expr { [selector_opd $op1] || [selector_opd $op2] }]
} else {
# Assume it's a list of target triplets.
set answer [selector_list $exp]
}
} else {
# Assume it's a list of target triplets.
set answer [selector_list $exp]
}
verbose "selector_expression: `$exp' $answer" 2
return $answer
}
proc dg-process-target { args } { proc dg-process-target { args } {
verbose "replacement dg-process-target" 2 verbose "replacement dg-process-target: `$args'" 2
# Extract the 'what' keyword from the argument list. # Extract the 'what' keyword from the argument list.
set selector [string trim [lindex $args 0]] set selector [string trim [lindex $args 0]]
...@@ -557,6 +614,14 @@ if { [info procs saved-dg-process-target] == [list] } { ...@@ -557,6 +614,14 @@ if { [info procs saved-dg-process-target] == [list] } {
} }
} }
if [string match "{*}" $rest] {
if [selector_expression [lindex $rest 0]] {
return [expr { $what == "xfail" ? "F" : "S" }]
} else {
return [expr { $what == "xfail" ? "P" : "N" }]
}
}
# The selector is not an effective-target keyword, so process # The selector is not an effective-target keyword, so process
# the list of target triplets. # the list of target triplets.
return [saved-dg-process-target $selector] return [saved-dg-process-target $selector]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment