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 | |