vkd3d-shader/hlsl: Handle error instructions in add_shader_compilation().
[vkd3d.git] / tests / preproc-macro.shader_test
blob911825df35b35a8927b33c2a1b081524bf88246f
1 [preproc]
2 #define KEY pass
3 KEY
5 [preproc]
6 #define KEY fail
7 pass
9 [preproc]
10 #define KEY(a, b) a
11 KEY(pass, fail)
13 [preproc]
14 /* Make sure argument expansion replaces the right tokens. */
15 #define KEY(pass, fail) fail
16 KEY(fail, pass)
18 [preproc]
19 #define KEY (pass)
20 KEY(a,b)
22 [preproc]
23 #define FUNC(a) pass
24 #define LEFT FUNC(
25 LEFT fail)
27 [preproc]
28 #define KEY(a, b) a
29 KEY(
30 pass
32 fail
35 [preproc]
36 /* Function-like macros which cannot be expanded (due to argument count mismatch
37  * or other parse errors) emit only the macro name and nothing else. In the case
38  * of unterminated macro lists, nothing after the macro name is emitted. */
39 #define pass(a, b) a b fail
40 pass(fail, fail
41 fail
43 [preproc]
44 #define pass(a, b) fail
45 pass(fail, fail, fail)
47 [preproc]
48 #define KEY(a, b) fail
49 KEY(fail, fail, fail)
50 pass
52 [preproc]
53 #define pass(a, b) fail
54 pass
55 (a, b)
57 [preproc]
58 #define FUNC(a) pass
59 #define KEY FUNC
60 KEY (fail)
62 [preproc]
63 #define KEY(a, b) a ## b
64 KEY  (  pa  ,  ss  )
66 [preproc]
67 #define KEY(a, b) pa ## ss
68 KEY(fail, fail)
70 [preproc]
71 #define KEY(a) a ## ss
72 KEY(pa)
74 [preproc]
75 #define KEY(a) pa ## a
76 KEY(ss)
78 [preproc]
79 #define KEY(x) p \
80  ## \
81  x \
82  ## \
83  ss
84 KEY(
88 [preproc]
89 /* Concatenation is only parsed if the macro has arguments. */
90 #define KEY fa ## il
91 KEY pass
93 [preproc]
94 #define KEY(a) a
95 KEY(pa ## ss)
97 [preproc]
98 fa ## il
99 pass
101 [preproc]
102 #define KEY1 KEY2
103 #define KEY2 pass
104 KEY1
106 [preproc]
107 #define KEY2 pass
108 #define KEY1 KEY2
109 KEY1
111 [preproc]
112 #define KEY fail
113 #undef KEY
114 KEY pass
116 [preproc]
117 #define KEY(a,b) fail
118 #undef KEY
119 KEY(pass, pass)
121 [preproc]
122 #define KEY1 KEY2
123 #define KEY2 fail
124 #undef KEY2
125 KEY1 pass
127 [preproc]
128 #define KEY2 fail
129 #define KEY1 KEY2
130 #undef KEY2
131 KEY1 pass
133 [preproc]
134 #define KEY1(a, b) a
135 #define KEY2 pass
136 #define KEY3 fail
137 KEY1(KEY2, KEY3)
139 [preproc]
140 #define a b
141 #define KEY(a) b
142 KEY(fail)
143 pass
145 [preproc]
146 #define a b
147 #define KEY(a) a
148 KEY(pass)
150 [preproc]
151 #define OP==
152 #if 2 OP 3
153 fail
154 #elif 2 OP 2
155 pass
156 #endif
158 [preproc]
159 #define KEY 1
160 #if KEY == 1
161 pass
162 #endif
164 [preproc]
165 #define KEY(a, b) (a < b)
166 #if KEY(2, 1)
167 fail
168 #elif KEY(1, 2)
169 pass
170 #endif
172 [preproc]
173 #define KEY fail
174 #define KEY pass
177 [preproc]
178 /* Identifiers are not expanded in the LHS of #define statements. */
179 #define KEY pass
180 #define KEY fail
181 pass
183 [preproc]
184 #undef KEY
185 pass
187 [preproc]
188 #define KEY(a, b) b
189 KEY("fail,fail",pass)
191 [preproc]
192 #define \
193 KEY( \
194 a \
195 , \
196 b \
197 ) \
199 KEY(pass, fail)
201 [preproc]
202 #define \
203 KEY \
204 pass
207 [preproc]
208 #define KEY(a, b) b
209 KEY(multiline
210 argument,pass)
212 [preproc]
213 #define KEY(a, b) b
214 KEY(
215 multiline
216 #define fail pass
217 argument, fail)
219 [preproc]
220 #define KEY(a, b) a
221 KEY((pass,pass),(fail,fail))
223 [preproc]
224 #define KEY(a, b) b
225 KEY((,,fail,,fail,,),(,,pass,,pass,,))
227 [preproc]
228 #define KEY(a, b) b
229 KEY([,,fail,,fail,,],[,,pass,,pass,,])
231 [preproc]
232 #define KEY(a, b) b
233 KEY({,,fail,,fail,,},{,,pass,,pass,,})
235 [preproc]
236 #define KEY(a, b) pass
237 KEY((),())
239 [preproc]
240 #define KEY(a, b) pass
241 KEY((,),(,))
243 [preproc]
244 /* Unbalanced parentheses result in an unterminated macro. */
245 #define pass(a, b) fail
246 pass((),()
248 [preproc]
249 #define KEY(a,a) a
250 KEY(pass,fail)
252 [preproc]
253 /* Macro arguments suffer their own macro expansion only after the macro has
254  * been completely parsed. */
255 #define KEY(a) a
256 KEY(fail
257 #define fail pass
260 [preproc]
261 /* The same applies to #if. */
262 #define KEY(a) a
263 KEY(
264 #define OBJ
265 #ifdef OBJ
266 pass
267 #endif
270 [preproc]
271 #define KEY(a) a
272 KEY(pass
273 #ifdef OBJ
274 fail
275 #endif
276 #define OBJ
279 [preproc]
280 /* Directives inside of macro arguments are always evaluated. */
281 #define FUNC(a) value
282 FUNC(fail
283 #define KEY pass
287 [preproc]
288 #define FUNC1(a) a ## ss
289 #define FUNC2(a, b) a < b
291 FUNC1(
292 #if FUNC2(3, 2)
293 fail
294 #elif FUNC2(2, 3)
296 #else
297 fail
298 #endif
301 [preproc]
302 #define __LINE__ pass
303 __LINE__
305 [preproc]
306 #define KEY pass
307 apple # KEY
309 [preproc]
310 #define KEY2(x) x ## ss
311 #define KEY(a) KEY2(a)
313 KEY(pa)
315 [preproc]
316 #define KEY2(x) x
317 #define KEY KEY2(fa il)
319 pass
321 [preproc]
322 #define Key1::Key2 pass
323 Key1::Key2
325 [preproc]
326 #define ::Key pass
327 ::Key
329 [preproc]
330 #define Key1::Key2(x) pass
331 Key1::Key2(fail)
333 [preproc]
334 #define Key1::Key2::Key3 pass
335 Key1::Key2::Key3
337 [preproc]
338 #define Key1:pass value
339 Key1:pass
341 [preproc]
342 #define Key1::::pass value
343 Key1::::pass
345 [preproc]
346 #define fail:: pass
347 fail
349 [preproc]
350 #define pass bar
351 #define key::bar fail
352 key::pass
354 [preproc]
355 #define pass bar
356 #define bar::key fail
357 pass::key
359 [preproc]
360 #define fail::1KEY pass
361 fail::1KEY
363 [preproc]
364 #define::pass value
365 ::pass
367 [preproc]
368 #define fail(key1::key2) key1::key2
369 fail(pass)
371 [preproc]
372 #define key1:: key2 pass
373 key1
375 [preproc]
376 #define key1 ::key2 pass
377 key1
379 [preproc]
380 #define KEY(a, b) a b
381 KEY(KEY(x, y), pass)