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
This commit is contained in:
parent
91442c2081
commit
8d2d2ec6bd
4 changed files with 94 additions and 11 deletions
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
* config.gcc (powerpc64-*-linux*): Default to -m64 also for
|
||||
|
|
|
@ -919,17 +919,26 @@ DejaGnu directives, which know nothing about the GCC directives, so the
|
|||
DejaGnu directives must precede GCC directives.
|
||||
|
||||
Several test directives include selectors which are usually preceded by
|
||||
the keyword @code{target} or @code{xfail}. A selector is one or
|
||||
more target triplets, possibly including wildcard characters, or else a
|
||||
single effective-target keyword. 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.
|
||||
|
||||
the keyword @code{target} or @code{xfail}. A selector is: one or more
|
||||
target triplets, possibly including wildcard characters; a single
|
||||
effective-target keyword; or a logical expression. 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.
|
||||
Effective-target keywords are defined in @file{target-supports.exp} in
|
||||
the GCC testsuite or, in the case of unusual effective targets that are
|
||||
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
|
||||
effective-target keywords.
|
||||
the GCC testsuite.
|
||||
|
||||
A selector expression appears within curly braces and uses a single
|
||||
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
|
||||
@item @{ dg-do @var{do-what-keyword} [@{ target/xfail @var{selector} @}] @}
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
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/test-framework.awk: Handle dg- tests.
|
||||
* gcc.test-framework/test-framework.exp: Handle dg- tests.
|
||||
|
|
|
@ -522,17 +522,74 @@ if { [info procs saved-dg-test] == [list] } {
|
|||
# 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
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# 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] } {
|
||||
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 } {
|
||||
verbose "replacement dg-process-target" 2
|
||||
verbose "replacement dg-process-target: `$args'" 2
|
||||
|
||||
# Extract the 'what' keyword from the argument list.
|
||||
set selector [string trim [lindex $args 0]]
|
||||
|
@ -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 list of target triplets.
|
||||
return [saved-dg-process-target $selector]
|
||||
|
|
Loading…
Add table
Reference in a new issue