1 // Note: %s and %S must be preceded by --, otherwise it may be interpreted as a
2 // command-line option, e.g. on Mac where %s is commonly under /Users.
3 
4 // /Yc
5 // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
6 // RUN:   | FileCheck -check-prefix=CHECK-YC %s
7 // 1. Build .pch file.
8 // CHECK-YC: cc1
9 // CHECK-YC: -emit-pch
10 // CHECK-YC: -building-pch-with-obj
11 // CHECK-YC: -o
12 // CHECK-YC: pchfile.pch
13 // CHECK-YC: -x
14 // CHECK-YC: "c++-header"
15 // 2. Use .pch file.
16 // CHECK-YC: cc1
17 // CHECK-YC: -emit-obj
18 // CHECK-YC: -building-pch-with-obj
19 // CHECK-YC: -include-pch
20 // CHECK-YC: pchfile.pch
21 
22 // /Yc /Fo
23 // /Fo overrides the .obj output filename, but not the .pch filename
24 // RUN: %clang_cl -Werror /Fomyobj.obj /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
25 // RUN:   | FileCheck -check-prefix=CHECK-YCO %s
26 // 1. Build .pch file.
27 // CHECK-YCO: cc1
28 // CHECK-YCO: -emit-pch
29 // CHECK-YCO: -building-pch-with-obj
30 // CHECK-YCO: -o
31 // CHECK-YCO: pchfile.pch
32 // 2. Use .pch file.
33 // CHECK-YCO: cc1
34 // CHECK-YCO: -emit-obj
35 // CHECK-YCO: -building-pch-with-obj
36 // CHECK-YCO: -include-pch
37 // CHECK-YCO: pchfile.pch
38 // CHECK-YCO: -o
39 // CHECK-YCO: myobj.obj
40 
41 // /Yc /Y-
42 // /Y- disables pch generation
43 // RUN: %clang_cl -Werror /Y- /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
44 // RUN:   | FileCheck -check-prefix=CHECK-YC-Y_ %s
45 // CHECK-YC-Y_-NOT: -emit-pch
46 // CHECK-YC-Y_-NOT: -include-pch
47 
48 // /Yu
49 // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
50 // RUN:   | FileCheck -check-prefix=CHECK-YU %s
51 // Use .pch file, but don't build it.
52 // CHECK-YU-NOT: -emit-pch
53 // CHECK-YU-NOT: -building-pch-with-obj
54 // CHECK-YU: cc1
55 // CHECK-YU: -emit-obj
56 // CHECK-YU: -include-pch
57 // CHECK-YU: pchfile.pch
58 
59 // /Yu /Y-
60 // RUN: %clang_cl -Werror /Y- /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
61 // RUN:   | FileCheck -check-prefix=CHECK-YU-Y_ %s
62 // CHECK-YU-Y_-NOT: -emit-pch
63 // CHECK-YU-Y_-NOT: -include-pch
64 
65 // /Yc /Yu -- /Yc overrides /Yc if they both refer to the same file
66 // RUN: %clang_cl -Werror /Ycpchfile.h /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
67 // RUN:   | FileCheck -check-prefix=CHECK-YC-YU %s
68 // 1. Build .pch file.
69 // CHECK-YC-YU: cc1
70 // CHECK-YC-YU: -emit-pch
71 // CHECK-YC-YU: -building-pch-with-obj
72 // CHECK-YC-YU: -o
73 // CHECK-YC-YU: pchfile.pch
74 // 2. Use .pch file.
75 // CHECK-YC-YU: cc1
76 // CHECK-YC-YU: -emit-obj
77 // CHECK-YC-YU: -include-pch
78 // CHECK-YC-YU: pchfile.pch
79 
80 // If /Yc /Yu refer to different files, semantics are pretty wonky.  Since this
81 // doesn't seem like something that's important in practice, just punt for now.
82 // RUN: %clang_cl -Werror /Ycfoo1.h /Yufoo2.h /FIfoo1.h /FIfoo2.h /c -### -- %s 2>&1 \
83 // RUN:   | FileCheck -check-prefix=CHECK-YC-YU-MISMATCH %s
84 // CHECK-YC-YU-MISMATCH: error: support for '/Yc' and '/Yu' with different filenames not implemented yet; flags ignored
85 
86 // Similarly, punt on /Yc with more than one input file.
87 // RUN: %clang_cl -Werror /Ycfoo1.h /FIfoo1.h /c -### -- %s %s 2>&1 \
88 // RUN:   | FileCheck -check-prefix=CHECK-YC-MULTIINPUT %s
89 // CHECK-YC-MULTIINPUT: error: support for '/Yc' with more than one source file not implemented yet; flag ignored
90 
91 // /Yc /Yu /Y-
92 // RUN: %clang_cl -Werror /Ycpchfile.h /Yupchfile.h /FIpchfile.h /Y- /c -### -- %s 2>&1 \
93 // RUN:   | FileCheck -check-prefix=CHECK-YC-YU-Y_ %s
94 // CHECK-YC-YU-Y_-NOT: -emit-pch
95 // CHECK-YC-YU-Y_-NOT: -include-pch
96 
97 // Test computation of pch filename in various cases.
98 
99 // /Yu /Fpout.pch => out.pch is filename
100 // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.pch /c -### -- %s 2>&1 \
101 // RUN:   | FileCheck -check-prefix=CHECK-YUFP1 %s
102 // Use .pch file, but don't build it.
103 // CHECK-YUFP1: -include-pch
104 // CHECK-YUFP1: out.pch
105 
106 // /Yu /Fpout => out.pch is filename (.pch gets added if no extension present)
107 // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.pch /c -### -- %s 2>&1 \
108 // RUN:   | FileCheck -check-prefix=CHECK-YUFP2 %s
109 // Use .pch file, but don't build it.
110 // CHECK-YUFP2: -include-pch
111 // CHECK-YUFP2: out.pch
112 
113 // /Yu /Fpout.bmp => out.bmp is filename (.pch not added when extension present)
114 // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.bmp /c -### -- %s 2>&1 \
115 // RUN:   | FileCheck -check-prefix=CHECK-YUFP3 %s
116 // Use .pch file, but don't build it.
117 // CHECK-YUFP3: -include-pch
118 // CHECK-YUFP3: out.bmp
119 
120 // /Yusub/dir.h => sub/dir.pch
121 // RUN: %clang_cl -Werror /Yusub/pchfile.h /FIsub/pchfile.h /c -### -- %s 2>&1 \
122 // RUN:   | FileCheck -check-prefix=CHECK-YUFP4 %s
123 // Use .pch file, but don't build it.
124 // CHECK-YUFP4: -include-pch
125 // CHECK-YUFP4: sub/pchfile.pch
126 
127 // /Yudir.h /Isub => dir.pch
128 // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Isub /c -### -- %s 2>&1 \
129 // RUN:   | FileCheck -check-prefix=CHECK-YUFP5 %s
130 // Use .pch file, but don't build it.
131 // CHECK-YUFP5: -include-pch
132 // CHECK-YUFP5: pchfile.pch
133 
134 // FIXME: /Fpdir: use dir/VCx0.pch when dir is directory, where x is major MSVS
135 // version in use.
136 
137 // Spot-check one use of /Fp with /Yc too, else trust the /Yu test cases above
138 // also all assume to /Yc.
139 // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /Fpsub/file.pch /c -### -- %s 2>&1 \
140 // RUN:   | FileCheck -check-prefix=CHECK-YCFP %s
141 // 1. Build .pch file.
142 // CHECK-YCFP: cc1
143 // CHECK-YCFP: -emit-pch
144 // CHECK-YCFP: -o
145 // CHECK-YCFP: sub/file.pch
146 // 2. Use .pch file.
147 // CHECK-YCFP: cc1
148 // CHECK-YCFP: -emit-obj
149 // CHECK-YCFP: -include-pch
150 // CHECK-YCFP: sub/file.pch
151 
152 // /Ycfoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h
153 // => foo1 and foo2 go into pch, foo3 into main compilation
154 // /Yc
155 // RUN: %clang_cl -Werror /Ycfoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h /c -### -- %s 2>&1 \
156 // RUN:   | FileCheck -check-prefix=CHECK-YCFIFIFI %s
157 // 1. Build .pch file: Includes foo1.h (but NOT foo3.h) and compiles foo2.h
158 // CHECK-YCFIFIFI: cc1
159 // CHECK-YCFIFIFI: -emit-pch
160 // CHECK-YCFIFIFI: -pch-through-header=foo2.h
161 // CHECK-YCFIFIFI: -include
162 // CHECK-YCFIFIFI: foo1.h
163 // CHECK-YCFIFIFI: -include
164 // CHECK-YCFIFIFI: foo2.h
165 // CHECK-YCFIFIFI: -include
166 // CHECK-YCFIFIFI: foo3.h
167 // CHECK-YCFIFIFI: -o
168 // CHECK-YCFIFIFI: foo2.pch
169 // CHECK-YCFIFIFI: -x
170 // CHECK-YCFIFIFI: "c++-header"
171 // CHECK-YCFIFIFI: cl-pch.cpp
172 // 2. Use .pch file: Inlucdes foo2.pch and foo3.h
173 // CHECK-YCFIFIFI: cc1
174 // CHECK-YCFIFIFI: -emit-obj
175 // CHECK-YCFIFIFI: -include-pch
176 // CHECK-YCFIFIFI: foo2.pch
177 // CHECK-YCFIFIFI: -pch-through-header=foo2.h
178 // CHECK-YCFIFIFI: -include
179 // CHECK-YCFIFIFI: foo1.h
180 // CHECK-YCFIFIFI: -include
181 // CHECK-YCFIFIFI: foo2.h
182 // CHECK-YCFIFIFI: -include
183 // CHECK-YCFIFIFI: foo3.h
184 // CHECK-YCFIFIFI: -o
185 // CHECK-YCFIFIFI: cl-pch.obj
186 // CHECK-YCFIFIFI: -x
187 // CHECK-YCFIFIFI: "c++"
188 // CHECK-YCFIFIFI: cl-pch.cpp
189 
190 // /Yufoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h
191 // => foo1 foo2 filtered out, foo3 into main compilation
192 // RUN: %clang_cl -Werror /Yufoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h /c -### -- %s 2>&1 \
193 // RUN:   | FileCheck -check-prefix=CHECK-YUFIFIFI %s
194 // Use .pch file, but don't build it.
195 // CHECK-YUFIFIFI-NOT: -emit-pch
196 // CHECK-YUFIFIFI: cc1
197 // CHECK-YUFIFIFI: -emit-obj
198 // CHECK-YUFIFIFI: -include-pch
199 // CHECK-YUFIFIFI: foo2.pch
200 // CHECK-YUFIFIFI: -pch-through-header=foo2.h
201 // CHECK-YUFIFIFI: -include
202 // CHECK-YUFIFIFI: foo1.h
203 // CHECK-YUFIFIFI: -include
204 // CHECK-YUFIFIFI: foo2.h
205 // CHECK-YUFIFIFI: -include
206 // CHECK-YUFIFIFI: foo3.h
207 
208 // Test /Ycfoo.h / /Yufoo.h without /FIfoo.h
209 // RUN: %clang_cl -Werror /Ycfoo.h /c -### -- %s 2>&1 \
210 // RUN:   | FileCheck -check-prefix=CHECK-YC-NOFI %s
211 // 1. Precompile
212 // CHECK-YC-NOFI: cc1
213 // CHECK-YC-NOFI: -emit-pch
214 // CHECK-YC-NOFI: -pch-through-header=foo.h
215 // CHECK-YC-NOFI: -o
216 // CHECK-YC-NOFI: foo.pch
217 // CHECK-YC-NOFI: -x
218 // CHECK-YC-NOFI: c++-header
219 // CHECK-YC-NOFI: cl-pch.cpp
220 // 2. Build PCH object
221 // CHECK-YC-NOFI: cc1
222 // CHECK-YC-NOFI: -emit-obj
223 // CHECK-YC-NOFI: -include-pch
224 // CHECK-YC-NOFI: foo.pch
225 // CHECK-YC-NOFI: -pch-through-header=foo.h
226 // CHECK-YC-NOFI: -x
227 // CHECK-YC-NOFI: c++
228 // CHECK-YC-NOFI: cl-pch.cpp
229 // RUN: %clang_cl -Werror /Yufoo.h /c -### -- %s 2>&1 \
230 // RUN:   | FileCheck -check-prefix=CHECK-YU-NOFI %s
231 // CHECK-YU-NOFI: cc1
232 // CHECK-YU-NOFI: -emit-obj
233 // CHECK-YU-NOFI: -include-pch
234 // CHECK-YU-NOFI: foo.pch
235 // CHECK-YU-NOFI: -pch-through-header=foo.h
236 // CHECK-YU-NOFI: -x
237 // CHECK-YU-NOFI: c++
238 // CHECK-YU-NOFI: cl-pch.cpp
239 
240 // With an actual /I argument.
241 // RUN: %clang_cl -Werror /Ifoo /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
242 // RUN:   | FileCheck -check-prefix=CHECK-YC-I3 %s
243 // 1. This writes pchfile.pch into the root dir, even if this will pick up
244 //    foo/pchfile.h
245 // CHECK-YC-I3: cc1
246 // CHECK-YC-I3: -emit-pch
247 // CHECK-YC-I3: -o
248 // CHECK-YC-I3: pchfile.pch
249 // 2. Use .pch file.
250 // CHECK-YC-I3: cc1
251 // CHECK-YC-I3: -emit-obj
252 // CHECK-YC-I3: -include-pch
253 // CHECK-YC-I3: pchfile.pch
254 
255 // But /FIfoo/bar.h /Ycfoo\bar.h does work, as does /FIfOo.h /Ycfoo.H
256 // RUN: %clang_cl -Werror /YupchFILE.h /FI./pchfile.h /c -### -- %s 2>&1 \
257 // RUN:   | FileCheck -check-prefix=CHECK-YU-CASE %s
258 // CHECK-YU-CASE: -pch-through-header=pchFILE.h
259 // CHECK-YU-CASE: -include
260 // CHECK-YU-CASE: "./pchfile.h"
261 // RUN: %clang_cl -Werror /Yu./pchfile.h /FI.\\pchfile.h /c -### -- %s 2>&1 \
262 // RUN:   | FileCheck -check-prefix=CHECK-YU-SLASH %s
263 // CHECK-YU-SLASH: -pch-through-header=./pchfile.h
264 // CHECK-YU-SLASH: -include
265 // CHECK-YU-SLASH: ".{{[/\\]+}}pchfile.h"
266 
267 // /Yc without an argument creates a PCH from the code before #pragma hdrstop.
268 // /Yu without an argument uses a PCH and starts compiling after the
269 // #pragma hdrstop.
270 // RUN: %clang_cl -Werror /Yc /Fpycnoarg.pch /c -### -- %s 2>&1 \
271 // RUN:   | FileCheck -check-prefix=CHECK-YC-NOARG %s
272 // 1. Create .pch file
273 // CHECK-YC-NOARG: cc1
274 // CHECK-YC-NOARG: -emit-pch
275 // CHECK-YC-NOARG: -pch-through-hdrstop-create
276 // CHECK-YC-NOARG: -o
277 // CHECK-YC-NOARG: ycnoarg.pch
278 // CHECK-YC-NOARG: -x
279 // CHECK-YC-NOARG: "c++-header"
280 // CHECK-YC-NOARG: cl-pch.cpp
281 // 2. Use .pch file: Includes ycnoarg.pch
282 // CHECK-YC-NOARG: cc1
283 // CHECK-YC-NOARG: -emit-obj
284 // CHECK-YC-NOARG: -include-pch
285 // CHECK-YC-NOARG: ycnoarg.pch
286 // CHECK-YC-NOARG: -pch-through-hdrstop-create
287 // CHECK-YC-NOARG: -o
288 // CHECK-YC-NOARG: cl-pch.obj
289 // CHECK-YC-NOARG: -x
290 // CHECK-YC-NOARG: "c++"
291 // CHECK-YC-NOARG: cl-pch.cpp
292 
293 // RUN: %clang_cl -Werror /Yu /Fpycnoarg.pch /c -### -- %s 2>&1 \
294 // RUN:   | FileCheck -check-prefix=CHECK-YU-NOARG %s
295 // Use .pch file, but don't build it.
296 // CHECK-YU-NOARG-NOT: -emit-pch
297 // CHECK-YU-NOARG: cc1
298 // CHECK-YU-NOARG: -emit-obj
299 // CHECK-YU-NOARG: -include-pch
300 // CHECK-YU-NOARG: ycnoarg.pch
301 // CHECK-YU-NOARG: -pch-through-hdrstop-use
302 // CHECK-YU-NOARG: -o
303 // CHECK-YU-NOARG: cl-pch.obj
304 // CHECK-YU-NOARG: -x
305 // CHECK-YU-NOARG: "c++"
306 // CHECK-YU-NOARG: cl-pch.cpp
307 
308 // /Yc with no argument and no /FP
309 // RUN: %clang_cl -Werror /Yc /c -### -- %s 2>&1 \
310 // RUN:   | FileCheck -check-prefix=CHECK-YC-NOARG-NOFP %s
311 // 1. Create .pch file
312 // CHECK-YC-NOARG-NOFP: cc1
313 // CHECK-YC-NOARG-NOFP: -emit-pch
314 // CHECK-YC-NOARG-NOFP: -pch-through-hdrstop-create
315 // CHECK-YC-NOARG-NOFP: -o
316 // CHECK-YC-NOARG-NOFP: cl-pch.pch
317 // CHECK-YC-NOARG-NOFP: -x
318 // CHECK-YC-NOARG-NOFP: "c++-header"
319 // CHECK-YC-NOARG-NOFP: cl-pch.cpp
320 // 2. Use .pch file: Includes cl-pch.pch
321 // CHECK-YC-NOARG-NOFP: cc1
322 // CHECK-YC-NOARG-NOFP: -emit-obj
323 // CHECK-YC-NOARG-NOFP: -include-pch
324 // CHECK-YC-NOARG-NOFP: cl-pch.pch
325 // CHECK-YC-NOARG-NOFP: -pch-through-hdrstop-create
326 // CHECK-YC-NOARG-NOFP: -o
327 // CHECK-YC-NOARG-NOFP: cl-pch.obj
328 // CHECK-YC-NOARG-NOFP: -x
329 // CHECK-YC-NOARG-NOFP: "c++"
330 // CHECK-YC-NOARG-NOFP: cl-pch.cpp
331 
332 // cl.exe warns on multiple /Yc, /Yu, /Fp arguments, but clang-cl silently just
333 // uses the last one.  This is true for e.g. /Fo too, so not warning on this
334 // is self-consistent with clang-cl's flag handling.
335 
336 // Interaction with /fallback
337 
338 // /Yc /fallback => /Yc not passed on (but /FI is)
339 // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /Fpfoo.pch /fallback /c -### -- %s 2>&1 \
340 // RUN:   | FileCheck -check-prefix=CHECK-YC-FALLBACK %s
341 // Note that in /fallback builds, if creation of the pch fails the main compile
342 // does still run so that /fallback can have an effect (this part is not tested)
343 // CHECK-YC-FALLBACK: cc1
344 // CHECK-YC-FALLBACK: -emit-obj
345 // CHECK-YC-FALLBACK: -include-pch
346 // CHECK-YC-FALLBACK: foo.pch
347 // CHECK-YC-FALLBACK: ||
348 // CHECK-YC-FALLBACK: cl.exe
349 // CHECK-YC-FALLBACK-NOT: -include-pch
350 // CHECK-YC-FALLBACK-NOT: /Ycpchfile.h
351 // CHECK-YC-FALLBACK: /FIpchfile.h
352 // CHECK-YC-FALLBACK-NOT: /Fpfoo.pch
353 
354 // /Yu /fallback => /Yu not passed on (but /FI is)
355 // RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpfoo.pch /fallback /c -### -- %s 2>&1 \
356 // RUN:   | FileCheck -check-prefix=CHECK-YU-FALLBACK %s
357 // CHECK-YU-FALLBACK-NOT: -emit-pch
358 // CHECK-YU-FALLBACK: cc1
359 // CHECK-YU-FALLBACK: -emit-obj
360 // CHECK-YU-FALLBACK: -include-pch
361 // CHECK-YU-FALLBACK: foo.pch
362 // CHECK-YU-FALLBACK: ||
363 // CHECK-YU-FALLBACK: cl.exe
364 // CHECK-YU-FALLBACK-NOT: -include-pch
365 // CHECK-YU-FALLBACK-NOT: /Yupchfile.h
366 // CHECK-YU-FALLBACK: /FIpchfile.h
367 // CHECK-YU-FALLBACK-NOT: /Fpfoo.pch
368 
369 // /FI without /Yu => pch file not used, even if it exists (different from
370 // -include, which picks up .gch files if they exist).
371 // RUN: touch %t.pch
372 // RUN: %clang_cl -Werror /FI%t.pch /Fp%t.pch /c -### -- %s 2>&1 \
373 // RUN:   | FileCheck -check-prefix=CHECK-FI %s
374 // CHECK-FI-NOT: -include-pch
375 // CHECK-FI: -include
376 
377 // Test interaction of /Yc with language mode flags.
378 
379 // If /TC changes the input language to C, a c pch file should be produced.
380 // RUN: %clang_cl /TC -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
381 // RUN:   | FileCheck -check-prefix=CHECK-YCTC %s
382 // CHECK-YCTC: cc1
383 // CHECK-YCTC: -emit-pch
384 // CHECK-YCTC: -o
385 // CHECK-YCTC: pchfile.pch
386 // CHECK-YCTC: -x
387 // CHECK-YCTC: "c"
388 
389 // Also check lower-case /Tc variant.
390 // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### /Tc%s 2>&1 \
391 // RUN:   | FileCheck -check-prefix=CHECK-YCTc %s
392 // CHECK-YCTc: cc1
393 // CHECK-YCTc: -emit-pch
394 // CHECK-YCTc: -o
395 // CHECK-YCTc: pchfile.pch
396 // CHECK-YCTc: -x
397 // CHECK-YCTc: "c"
398 
399 // Don't crash when a non-source file is passed.
400 // RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %S/Inputs/file.prof 2>&1 \
401 // RUN:   | FileCheck -check-prefix=CHECK-NoSource %s
402 // CHECK-NoSource: file.prof:{{.*}}input unused
403 
404 // ...but if an explicit flag turns the file into a source file, handle it:
405 // RUN: %clang_cl /TP -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %S/Inputs/file.prof 2>&1 \
406 // RUN:   | FileCheck -check-prefix=CHECK-NoSourceTP %s
407 // CHECK-NoSourceTP: cc1
408 // CHECK-NoSourceTP: -emit-pch
409 // CHECK-NoSourceTP: -o
410 // CHECK-NoSourceTP: pchfile.pch
411 // CHECK-NoSourceTP: -x
412 // CHECK-NoSourceTP: "c++"
413 
414 // If only preprocessing, PCH options are ignored.
415 // RUN: %clang_cl /P /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
416 // RUN:   | FileCheck -check-prefix=CHECK-YC-P %s
417 // CHECK-YC-P-NOT: -emit-pch
418 // CHECK-YC-P-NOT: -include-pch
419 
420 // RUN: %clang_cl /E /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
421 // RUN:   | FileCheck -check-prefix=CHECK-YC-E %s
422 // CHECK-YC-E-NOT: -emit-pch
423 // CHECK-YC-E-NOT: -include-pch
424 
425 // RUN: %clang_cl /P /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
426 // RUN:   | FileCheck -check-prefix=CHECK-YU-P %s
427 // CHECK-YU-P-NOT: -emit-pch
428 // CHECK-YU-P-NOT: -include-pch
429 
430 // RUN: %clang_cl /E /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
431 // RUN:   | FileCheck -check-prefix=CHECK-YU-E %s
432 // CHECK-YU-E-NOT: -emit-pch
433 // CHECK-YU-E-NOT: -include-pch
434