Selecting targets to which a test applies#
Several test directives include selector
s to limit the targets
for which a test is run or to declare that a test is expected to fail
on particular targets.
A selector is:
one or more target triplets, possibly including wildcard characters; use
*-*-*
to match any targeta single effective-target keyword (see Keywords describing target attributes)
a list of compiler options that should be included or excluded (as described in more detail below)
a logical expression
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 target
or xfail
also allows
target {selector1 xfail selector2 }
to skip the test for targets that don’t match selector1
and the
test to fail for targets that match selector2
.
A selector expression appears within curly braces and uses a single
logical operator: one of !
, &&
, or ||
. An
operand is one of the following:
another selector expression, in curly braces
an effective-target keyword, such as
lp64
a single target triplet
a list of target triplets within quotes or curly braces
one of the following:
any-opts {opt1 ... optn }
Each of
opt1
tooptn
is a space-separated list of option globs. The selector expression evaluates to true if, for one of these strings, every glob in the string matches an option that was passed to the compiler. For example:{ any-opts "-O3 -flto" "-O[2g]" }
is true if any of the following are true:
This kind of selector can only be used within
dg-final
directives. Usedg-skip-if
,dg-xfail-if
ordg-xfail-run-if
to skip whole tests based on options, or to mark them as expected to fail with certain options.no-opts {opt1 ... optn }
As for
any-opts
above, each ofopt1
tooptn
is a space-separated list of option globs. The selector expression evaluates to true if, for all of these strings, there is at least one glob that does not match an option that was passed to the compiler. It is shorthand for:{ ! { any-opts opt1 ... optn } }
For example:
{ no-opts "-O3 -flto" "-O[2g]" }
is true if all of the following are true:
Like
any-opts
, this kind of selector can only be used withindg-final
directives.
Here are some examples of full target selectors:
{ target { ! "hppa*-*-* ia64*-*-*" } }
{ target { powerpc*-*-* && lp64 } }
{ xfail { lp64 || vect_no_align } }
{ xfail { aarch64*-*-* && { any-opts "-O2" } } }