Several test directives include selectors 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:
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:
lp64
Each of opt1 to optn 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.
Use dg-skip-if
, dg-xfail-if
or dg-xfail-run-if
to
skip whole tests based on options, or to mark them as expected to fail
with certain options.
As for any-opts
above, each of opt1 to optn 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 within
dg-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" } } }