blob: bef5ce6bd04c82fe18d62b39042e3e592dedd47d [file] [log] [blame]
Nico Weber2ca4be92016-03-01 23:16:44 +00001// 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
Nico Weber381ec2a2016-03-04 21:59:42 +00005// RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +00006// RUN: | FileCheck -check-prefix=CHECK-YC %s
7// 1. Build .pch file.
8// CHECK-YC: cc1
9// CHECK-YC: -emit-pch
Hans Wennborg08c5a7b2018-06-25 13:23:49 +000010// CHECK-YC: -building-pch-with-obj
Nico Weber2ca4be92016-03-01 23:16:44 +000011// CHECK-YC: -o
12// CHECK-YC: pchfile.pch
13// CHECK-YC: -x
Richard Smithdd4ad3d2016-08-30 19:06:26 +000014// CHECK-YC: "c++-header"
Nico Weber2ca4be92016-03-01 23:16:44 +000015// 2. Use .pch file.
16// CHECK-YC: cc1
17// CHECK-YC: -emit-obj
Hans Wennborg08c5a7b2018-06-25 13:23:49 +000018// CHECK-YC: -building-pch-with-obj
Nico Weber2ca4be92016-03-01 23:16:44 +000019// 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
Nico Weber381ec2a2016-03-04 21:59:42 +000024// RUN: %clang_cl -Werror /Fomyobj.obj /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +000025// RUN: | FileCheck -check-prefix=CHECK-YCO %s
26// 1. Build .pch file.
27// CHECK-YCO: cc1
28// CHECK-YCO: -emit-pch
Hans Wennborg08c5a7b2018-06-25 13:23:49 +000029// CHECK-YCO: -building-pch-with-obj
Nico Weber2ca4be92016-03-01 23:16:44 +000030// CHECK-YCO: -o
31// CHECK-YCO: pchfile.pch
32// 2. Use .pch file.
33// CHECK-YCO: cc1
34// CHECK-YCO: -emit-obj
Hans Wennborg08c5a7b2018-06-25 13:23:49 +000035// CHECK-YCO: -building-pch-with-obj
Nico Weber2ca4be92016-03-01 23:16:44 +000036// 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
Nico Weber381ec2a2016-03-04 21:59:42 +000043// RUN: %clang_cl -Werror /Y- /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +000044// 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
Nico Weber381ec2a2016-03-04 21:59:42 +000049// RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +000050// RUN: | FileCheck -check-prefix=CHECK-YU %s
51// Use .pch file, but don't build it.
52// CHECK-YU-NOT: -emit-pch
Hans Wennborg08c5a7b2018-06-25 13:23:49 +000053// CHECK-YU-NOT: -building-pch-with-obj
Nico Weber2ca4be92016-03-01 23:16:44 +000054// CHECK-YU: cc1
55// CHECK-YU: -emit-obj
56// CHECK-YU: -include-pch
57// CHECK-YU: pchfile.pch
58
59// /Yu /Y-
Nico Weber381ec2a2016-03-04 21:59:42 +000060// RUN: %clang_cl -Werror /Y- /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +000061// 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
Nico Weber381ec2a2016-03-04 21:59:42 +000066// RUN: %clang_cl -Werror /Ycpchfile.h /Yupchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +000067// RUN: | FileCheck -check-prefix=CHECK-YC-YU %s
68// 1. Build .pch file.
69// CHECK-YC-YU: cc1
70// CHECK-YC-YU: -emit-pch
Hans Wennborg08c5a7b2018-06-25 13:23:49 +000071// CHECK-YC-YU: -building-pch-with-obj
Nico Weber2ca4be92016-03-01 23:16:44 +000072// 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.
Nico Weber381ec2a2016-03-04 21:59:42 +000082// RUN: %clang_cl -Werror /Ycfoo1.h /Yufoo2.h /FIfoo1.h /FIfoo2.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +000083// 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.
Nico Weber381ec2a2016-03-04 21:59:42 +000087// RUN: %clang_cl -Werror /Ycfoo1.h /FIfoo1.h /c -### -- %s %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +000088// 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-
Nico Weber381ec2a2016-03-04 21:59:42 +000092// RUN: %clang_cl -Werror /Ycpchfile.h /Yupchfile.h /FIpchfile.h /Y- /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +000093// 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
Nico Weber381ec2a2016-03-04 21:59:42 +0000100// RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.pch /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000101// 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)
Nico Weber381ec2a2016-03-04 21:59:42 +0000107// RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.pch /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000108// 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)
Nico Weber381ec2a2016-03-04 21:59:42 +0000114// RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpout.bmp /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000115// 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
Nico Weber381ec2a2016-03-04 21:59:42 +0000121// RUN: %clang_cl -Werror /Yusub/pchfile.h /FIsub/pchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000122// 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
Nico Weber381ec2a2016-03-04 21:59:42 +0000128// RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Isub /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000129// 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.
Nico Weber381ec2a2016-03-04 21:59:42 +0000139// RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /Fpsub/file.pch /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000140// 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
Nico Weber381ec2a2016-03-04 21:59:42 +0000155// RUN: %clang_cl -Werror /Ycfoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000156// 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: -include
161// CHECK-YCFIFIFI: foo1.h
162// CHECK-YCFIFIFI-NOT: foo2.h
163// CHECK-YCFIFIFI-NOT: foo3.h
164// CHECK-YCFIFIFI: -o
165// CHECK-YCFIFIFI: foo2.pch
166// CHECK-YCFIFIFI: -x
Richard Smithdd4ad3d2016-08-30 19:06:26 +0000167// CHECK-YCFIFIFI: "c++-header"
Nico Weber2ca4be92016-03-01 23:16:44 +0000168// CHECK-YCFIFIFI: foo2.h
169// 2. Use .pch file: Inlucdes foo2.pch and foo3.h
170// CHECK-YCFIFIFI: cc1
171// CHECK-YCFIFIFI: -emit-obj
172// CHECK-YCFIFIFI-NOT: foo1.h
173// CHECK-YCFIFIFI-NOT: foo2.h
174// CHECK-YCFIFIFI: -include-pch
175// CHECK-YCFIFIFI: foo2.pch
176// CHECK-YCFIFIFI: -include
177// CHECK-YCFIFIFI: foo3.h
178
179// /Yucfoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h
180// => foo1 foo2 filtered out, foo3 into main compilation
Nico Weber381ec2a2016-03-04 21:59:42 +0000181// RUN: %clang_cl -Werror /Yufoo2.h /FIfoo1.h /FIfoo2.h /FIfoo3.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000182// RUN: | FileCheck -check-prefix=CHECK-YUFIFIFI %s
183// Use .pch file, but don't build it.
184// CHECK-YUFIFIFI-NOT: -emit-pch
185// CHECK-YUFIFIFI: cc1
186// CHECK-YUFIFIFI: -emit-obj
187// CHECK-YUFIFIFI-NOT: foo1.h
188// CHECK-YUFIFIFI-NOT: foo2.h
189// CHECK-YUFIFIFI: -include-pch
190// CHECK-YUFIFIFI: foo2.pch
191// CHECK-YUFIFIFI: -include
192// CHECK-YUFIFIFI: foo3.h
193
194// FIXME: Implement support for /Ycfoo.h / /Yufoo.h without /FIfoo.h
Nico Weber381ec2a2016-03-04 21:59:42 +0000195// RUN: %clang_cl -Werror /Ycfoo.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000196// RUN: | FileCheck -check-prefix=CHECK-YC-NOFI %s
197// CHECK-YC-NOFI: error: support for '/Yc' without a corresponding /FI flag not implemented yet; flag ignored
Nico Weber381ec2a2016-03-04 21:59:42 +0000198// RUN: %clang_cl -Werror /Yufoo.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000199// RUN: | FileCheck -check-prefix=CHECK-YU-NOFI %s
200// CHECK-YU-NOFI: error: support for '/Yu' without a corresponding /FI flag not implemented yet; flag ignored
201
202// /Yc and /FI relative to /I paths...
203// The rules are:
204// Yu/Yc and FI parameter must match exactly, else it's not found
205// Must match literally exactly: /FI./foo.h /Ycfoo.h does _not_ work.
206// However, the path can be relative to /I paths.
207// FIXME: Update the error messages below once /FI is no longer required, but
208// these test cases all should stay failures as they fail with cl.exe.
209
210// Check that ./ isn't canonicalized away.
Nico Weber381ec2a2016-03-04 21:59:42 +0000211// RUN: %clang_cl -Werror /Ycpchfile.h /FI./pchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000212// RUN: | FileCheck -check-prefix=CHECK-YC-I1 %s
213// CHECK-YC-I1: support for '/Yc' without a corresponding /FI flag not implemented yet; flag ignored
214
215// Check that ./ isn't canonicalized away.
Nico Weber381ec2a2016-03-04 21:59:42 +0000216// RUN: %clang_cl -Werror /Yc./pchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000217// RUN: | FileCheck -check-prefix=CHECK-YC-I2 %s
218// CHECK-YC-I2: support for '/Yc' without a corresponding /FI flag not implemented yet; flag ignored
219
220// With an actual /I argument.
Nico Weber381ec2a2016-03-04 21:59:42 +0000221// RUN: %clang_cl -Werror /Ifoo /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000222// RUN: | FileCheck -check-prefix=CHECK-YC-I3 %s
223// 1. This writes pchfile.pch into the root dir, even if this will pick up
224// foo/pchfile.h
225// CHECK-YC-I3: cc1
226// CHECK-YC-I3: -emit-pch
227// CHECK-YC-I3: -o
228// CHECK-YC-I3: pchfile.pch
229// 2. Use .pch file.
230// CHECK-YC-I3: cc1
231// CHECK-YC-I3: -emit-obj
232// CHECK-YC-I3: -include-pch
233// CHECK-YC-I3: pchfile.pch
234
235// Check that ./ isn't canonicalized away for /Yu either.
Nico Weber381ec2a2016-03-04 21:59:42 +0000236// RUN: %clang_cl -Werror /Yupchfile.h /FI./pchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000237// RUN: | FileCheck -check-prefix=CHECK-YU-I1 %s
238// CHECK-YU-I1: support for '/Yu' without a corresponding /FI flag not implemented yet; flag ignored
239
240// But /FIfoo/bar.h /Ycfoo\bar.h does work, as does /FIfOo.h /Ycfoo.H
241// FIXME: This part isn't implemented yet. The following two tests should not
242// show an error but do regular /Yu handling.
Nico Weber381ec2a2016-03-04 21:59:42 +0000243// RUN: %clang_cl -Werror /YupchFILE.h /FI./pchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000244// RUN: | FileCheck -check-prefix=CHECK-YU-CASE %s
245// CHECK-YU-CASE: support for '/Yu' without a corresponding /FI flag not implemented yet; flag ignored
Nico Weber381ec2a2016-03-04 21:59:42 +0000246// RUN: %clang_cl -Werror /Yu./pchfile.h /FI.\pchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000247// RUN: | FileCheck -check-prefix=CHECK-YU-SLASH %s
248// CHECK-YU-SLASH: support for '/Yu' without a corresponding /FI flag not implemented yet; flag ignored
249
250// cl.exe warns on multiple /Yc, /Yu, /Fp arguments, but clang-cl silently just
251// uses the last one. This is true for e.g. /Fo too, so not warning on this
252// is self-consistent with clang-cl's flag handling.
253
254// Interaction with /fallback
255
256// /Yc /fallback => /Yc not passed on (but /FI is)
Nico Weber381ec2a2016-03-04 21:59:42 +0000257// RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /Fpfoo.pch /fallback /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000258// RUN: | FileCheck -check-prefix=CHECK-YC-FALLBACK %s
259// Note that in /fallback builds, if creation of the pch fails the main compile
260// does still run so that /fallback can have an effect (this part is not tested)
261// CHECK-YC-FALLBACK: cc1
262// CHECK-YC-FALLBACK: -emit-obj
263// CHECK-YC-FALLBACK: -include-pch
264// CHECK-YC-FALLBACK: foo.pch
265// CHECK-YC-FALLBACK: ||
266// CHECK-YC-FALLBACK: cl.exe
267// CHECK-YC-FALLBACK-NOT: -include-pch
268// CHECK-YC-FALLBACK-NOT: /Ycpchfile.h
269// CHECK-YC-FALLBACK: /FIpchfile.h
270// CHECK-YC-FALLBACK-NOT: /Fpfoo.pch
271
272// /Yu /fallback => /Yu not passed on (but /FI is)
Nico Weber381ec2a2016-03-04 21:59:42 +0000273// RUN: %clang_cl -Werror /Yupchfile.h /FIpchfile.h /Fpfoo.pch /fallback /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000274// RUN: | FileCheck -check-prefix=CHECK-YU-FALLBACK %s
275// CHECK-YU-FALLBACK-NOT: -emit-pch
276// CHECK-YU-FALLBACK: cc1
277// CHECK-YU-FALLBACK: -emit-obj
278// CHECK-YU-FALLBACK: -include-pch
279// CHECK-YU-FALLBACK: foo.pch
280// CHECK-YU-FALLBACK: ||
281// CHECK-YU-FALLBACK: cl.exe
282// CHECK-YU-FALLBACK-NOT: -include-pch
283// CHECK-YU-FALLBACK-NOT: /Yupchfile.h
284// CHECK-YU-FALLBACK: /FIpchfile.h
285// CHECK-YU-FALLBACK-NOT: /Fpfoo.pch
286
287// /FI without /Yu => pch file not used, even if it exists (different from
288// -include, which picks up .gch files if they exist).
289// RUN: touch %t.pch
Nico Weber381ec2a2016-03-04 21:59:42 +0000290// RUN: %clang_cl -Werror /FI%t.pch /Fp%t.pch /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000291// RUN: | FileCheck -check-prefix=CHECK-FI %s
292// CHECK-FI-NOT: -include-pch
293// CHECK-FI: -include
294
295// Test interaction of /Yc with language mode flags.
296
297// If /TC changes the input language to C, a c pch file should be produced.
Nico Weber381ec2a2016-03-04 21:59:42 +0000298// RUN: %clang_cl /TC -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000299// RUN: | FileCheck -check-prefix=CHECK-YCTC %s
300// CHECK-YCTC: cc1
301// CHECK-YCTC: -emit-pch
302// CHECK-YCTC: -o
303// CHECK-YCTC: pchfile.pch
304// CHECK-YCTC: -x
Nico Weberad2d8f32016-04-21 19:59:10 +0000305// CHECK-YCTC: "c"
Nico Weber2ca4be92016-03-01 23:16:44 +0000306
307// Also check lower-case /Tc variant.
Nico Weber381ec2a2016-03-04 21:59:42 +0000308// RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### /Tc%s 2>&1 \
Nico Weber2ca4be92016-03-01 23:16:44 +0000309// RUN: | FileCheck -check-prefix=CHECK-YCTc %s
310// CHECK-YCTc: cc1
311// CHECK-YCTc: -emit-pch
312// CHECK-YCTc: -o
313// CHECK-YCTc: pchfile.pch
314// CHECK-YCTc: -x
315// CHECK-YCTc: "c"
Nico Weberad2d8f32016-04-21 19:59:10 +0000316
317// Don't crash when a non-source file is passed.
Nico Weber37960932016-04-22 00:38:09 +0000318// RUN: %clang_cl -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %S/Inputs/file.prof 2>&1 \
Nico Weberad2d8f32016-04-21 19:59:10 +0000319// RUN: | FileCheck -check-prefix=CHECK-NoSource %s
320// CHECK-NoSource: file.prof:{{.*}}input unused
321
Nico Weber39dc7442016-08-30 14:24:28 +0000322// ...but if an explicit flag turns the file into a source file, handle it:
Nico Weber37960932016-04-22 00:38:09 +0000323// RUN: %clang_cl /TP -Werror /Ycpchfile.h /FIpchfile.h /c -### -- %S/Inputs/file.prof 2>&1 \
Nico Weberad2d8f32016-04-21 19:59:10 +0000324// RUN: | FileCheck -check-prefix=CHECK-NoSourceTP %s
325// CHECK-NoSourceTP: cc1
326// CHECK-NoSourceTP: -emit-pch
327// CHECK-NoSourceTP: -o
328// CHECK-NoSourceTP: pchfile.pch
329// CHECK-NoSourceTP: -x
330// CHECK-NoSourceTP: "c++"