1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2023 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below). A copy of the license is included in the section entitled
"GNU Free Documentation License".
(a) The FSF's Front-Cover Text is:
A GNU Manual
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU
software. Copies published by the Free Software Foundation raise
funds for GNU development. -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Compiler Collection (GCC) Internals: Selectors</title>
<meta name="description" content="GNU Compiler Collection (GCC) Internals: Selectors">
<meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Selectors">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Test-Directives.html#Test-Directives" rel="up" title="Test Directives">
<link href="Effective_002dTarget-Keywords.html#Effective_002dTarget-Keywords" rel="next" title="Effective-Target Keywords">
<link href="Directives.html#Directives" rel="previous" title="Directives">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Selectors"></a>
<div class="header">
<p>
Next: <a href="Effective_002dTarget-Keywords.html#Effective_002dTarget-Keywords" accesskey="n" rel="next">Effective-Target Keywords</a>, Previous: <a href="Directives.html#Directives" accesskey="p" rel="previous">Directives</a>, Up: <a href="Test-Directives.html#Test-Directives" accesskey="u" rel="up">Test Directives</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Selecting-targets-to-which-a-test-applies"></a>
<h4 class="subsection">7.2.2 Selecting targets to which a test applies</h4>
<p>Several test directives include <var>selector</var>s to limit the targets
for which a test is run or to declare that a test is expected to fail
on particular targets.
</p>
<p>A selector is:
</p><ul>
<li> one or more target triplets, possibly including wildcard characters;
use ‘<samp>*-*-*</samp>’ to match any target
</li><li> a single effective-target keyword (see <a href="Effective_002dTarget-Keywords.html#Effective_002dTarget-Keywords">Effective-Target Keywords</a>)
</li><li> a list of compiler options that should be included or excluded
(as described in more detail below)
</li><li> a logical expression
</li></ul>
<p>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</samp>’ or ‘<samp>xfail</samp>’ also allows
‘<samp>{ target <var>selector1</var> xfail <var>selector2</var> }</samp>’
to skip the test for targets that don’t match <var>selector1</var> and the
test to fail for targets that match <var>selector2</var>.
</p>
<p>A selector expression appears within curly braces and uses a single
logical operator: one of ‘<samp>!</samp>’, ‘<samp>&&</samp>’, or ‘<samp>||</samp>’. An
operand is one of the following:
</p>
<ul>
<li> another selector expression, in curly braces
</li><li> an effective-target keyword, such as <code>lp64</code>
</li><li> a single target triplet
</li><li> a list of target triplets within quotes or curly braces
</li><li> one of the following:
<dl compact="compact">
<dt>‘<samp>{ any-opts <var>opt1</var> … <var>optn</var> }</samp>’</dt>
<dd><p>Each of <var>opt1</var> to <var>optn</var> 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:
</p>
<div class="smallexample">
<pre class="smallexample">{ any-opts "-O3 -flto" "-O[2g]" }
</pre></div>
<p>is true if any of the following are true:
</p>
<ul>
<li> <samp>-O2</samp> was passed to the compiler
</li><li> <samp>-Og</samp> was passed to the compiler
</li><li> both <samp>-O3</samp> and <samp>-flto</samp> were passed to the compiler
</li></ul>
<p>This kind of selector can only be used within <code>dg-final</code> directives.
Use <code>dg-skip-if</code>, <code>dg-xfail-if</code> or <code>dg-xfail-run-if</code> to
skip whole tests based on options, or to mark them as expected to fail
with certain options.
</p>
</dd>
<dt>‘<samp>{ no-opts <var>opt1</var> … <var>optn</var> }</samp>’</dt>
<dd><p>As for <code>any-opts</code> above, each of <var>opt1</var> to <var>optn</var> 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:
</p>
<div class="smallexample">
<pre class="smallexample">{ ! { any-opts <var>opt1</var> … <var>optn</var> } }
</pre></div>
<p>For example:
</p>
<div class="smallexample">
<pre class="smallexample">{ no-opts "-O3 -flto" "-O[2g]" }
</pre></div>
<p>is true if all of the following are true:
</p>
<ul>
<li> <samp>-O2</samp> was not passed to the compiler
</li><li> <samp>-Og</samp> was not passed to the compiler
</li><li> at least one of <samp>-O3</samp> or <samp>-flto</samp> was not passed to the compiler
</li></ul>
<p>Like <code>any-opts</code>, this kind of selector can only be used within
<code>dg-final</code> directives.
</p>
</dd>
</dl>
</li></ul>
<p>Here are some examples of full target selectors:
</p>
<div class="smallexample">
<pre class="smallexample">{ target { ! "hppa*-*-* ia64*-*-*" } }
{ target { powerpc*-*-* && lp64 } }
{ xfail { lp64 || vect_no_align } }
{ xfail { aarch64*-*-* && { any-opts "-O2" } } }
</pre></div>
<hr>
<div class="header">
<p>
Next: <a href="Effective_002dTarget-Keywords.html#Effective_002dTarget-Keywords" accesskey="n" rel="next">Effective-Target Keywords</a>, Previous: <a href="Directives.html#Directives" accesskey="p" rel="previous">Directives</a>, Up: <a href="Test-Directives.html#Test-Directives" accesskey="u" rel="up">Test Directives</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|