1*67e74705SXin Li // Note: %s must be preceded by --, otherwise it may be interpreted as a
2*67e74705SXin Li // command-line option, e.g. on Mac where %s is commonly under /Users.
3*67e74705SXin Li
4*67e74705SXin Li
5*67e74705SXin Li // Alias options:
6*67e74705SXin Li
7*67e74705SXin Li // RUN: %clang_cl /c -### -- %s 2>&1 | FileCheck -check-prefix=c %s
8*67e74705SXin Li // c: -c
9*67e74705SXin Li
10*67e74705SXin Li // RUN: %clang_cl /C -### -- %s 2>&1 | FileCheck -check-prefix=C %s
11*67e74705SXin Li // C: error: invalid argument '-C' only allowed with '/E, /P or /EP'
12*67e74705SXin Li
13*67e74705SXin Li // RUN: %clang_cl /C /P -### -- %s 2>&1 | FileCheck -check-prefix=C_P %s
14*67e74705SXin Li // C_P: "-E"
15*67e74705SXin Li // C_P: "-C"
16*67e74705SXin Li
17*67e74705SXin Li // RUN: %clang_cl /Dfoo=bar /D bar=baz /DMYDEF#value /DMYDEF2=foo#bar /DMYDEF3#a=b /DMYDEF4# \
18*67e74705SXin Li // RUN: -### -- %s 2>&1 | FileCheck -check-prefix=D %s
19*67e74705SXin Li // D: "-D" "foo=bar"
20*67e74705SXin Li // D: "-D" "bar=baz"
21*67e74705SXin Li // D: "-D" "MYDEF=value"
22*67e74705SXin Li // D: "-D" "MYDEF2=foo#bar"
23*67e74705SXin Li // D: "-D" "MYDEF3=a=b"
24*67e74705SXin Li // D: "-D" "MYDEF4="
25*67e74705SXin Li
26*67e74705SXin Li // RUN: %clang_cl /E -### -- %s 2>&1 | FileCheck -check-prefix=E %s
27*67e74705SXin Li // E: "-E"
28*67e74705SXin Li // E: "-o" "-"
29*67e74705SXin Li
30*67e74705SXin Li // RUN: %clang_cl /EP -### -- %s 2>&1 | FileCheck -check-prefix=EP %s
31*67e74705SXin Li // EP: "-E"
32*67e74705SXin Li // EP: "-P"
33*67e74705SXin Li // EP: "-o" "-"
34*67e74705SXin Li
35*67e74705SXin Li // RUN: %clang_cl /fp:fast /fp:except -### -- %s 2>&1 | FileCheck -check-prefix=fpexcept %s
36*67e74705SXin Li // fpexcept-NOT: -menable-unsafe-fp-math
37*67e74705SXin Li
38*67e74705SXin Li // RUN: %clang_cl /fp:fast /fp:except /fp:except- -### -- %s 2>&1 | FileCheck -check-prefix=fpexcept_ %s
39*67e74705SXin Li // fpexcept_: -menable-unsafe-fp-math
40*67e74705SXin Li
41*67e74705SXin Li // RUN: %clang_cl /fp:precise /fp:fast -### -- %s 2>&1 | FileCheck -check-prefix=fpfast %s
42*67e74705SXin Li // fpfast: -menable-unsafe-fp-math
43*67e74705SXin Li // fpfast: -ffast-math
44*67e74705SXin Li
45*67e74705SXin Li // RUN: %clang_cl /fp:fast /fp:precise -### -- %s 2>&1 | FileCheck -check-prefix=fpprecise %s
46*67e74705SXin Li // fpprecise-NOT: -menable-unsafe-fp-math
47*67e74705SXin Li // fpprecise-NOT: -ffast-math
48*67e74705SXin Li
49*67e74705SXin Li // RUN: %clang_cl /fp:fast /fp:strict -### -- %s 2>&1 | FileCheck -check-prefix=fpstrict %s
50*67e74705SXin Li // fpstrict-NOT: -menable-unsafe-fp-math
51*67e74705SXin Li // fpstrict-NOT: -ffast-math
52*67e74705SXin Li
53*67e74705SXin Li // RUN: %clang_cl /GA -### -- %s 2>&1 | FileCheck -check-prefix=GA %s
54*67e74705SXin Li // GA: -ftls-model=local-exec
55*67e74705SXin Li
56*67e74705SXin Li // RTTI is on by default; just check that we don't error.
57*67e74705SXin Li // RUN: %clang_cl /Zs /GR -- %s 2>&1
58*67e74705SXin Li
59*67e74705SXin Li // RUN: %clang_cl /GR- -### -- %s 2>&1 | FileCheck -check-prefix=GR_ %s
60*67e74705SXin Li // GR_: -fno-rtti
61*67e74705SXin Li
62*67e74705SXin Li // Security Buffer Check is on by default.
63*67e74705SXin Li // RUN: %clang_cl -### -- %s 2>&1 | FileCheck -check-prefix=GS-default %s
64*67e74705SXin Li // GS-default: "-stack-protector" "2"
65*67e74705SXin Li
66*67e74705SXin Li // RUN: %clang_cl /GS -### -- %s 2>&1 | FileCheck -check-prefix=GS %s
67*67e74705SXin Li // GS: "-stack-protector" "2"
68*67e74705SXin Li
69*67e74705SXin Li // RUN: %clang_cl /GS- -### -- %s 2>&1 | FileCheck -check-prefix=GS_ %s
70*67e74705SXin Li // GS_-NOT: -stack-protector
71*67e74705SXin Li
72*67e74705SXin Li // RUN: %clang_cl /Gy -### -- %s 2>&1 | FileCheck -check-prefix=Gy %s
73*67e74705SXin Li // Gy: -ffunction-sections
74*67e74705SXin Li
75*67e74705SXin Li // RUN: %clang_cl /Gy /Gy- -### -- %s 2>&1 | FileCheck -check-prefix=Gy_ %s
76*67e74705SXin Li // Gy_-NOT: -ffunction-sections
77*67e74705SXin Li
78*67e74705SXin Li // RUN: %clang_cl /Gs -### -- %s 2>&1 | FileCheck -check-prefix=Gs %s
79*67e74705SXin Li // Gs: "-mstack-probe-size=0"
80*67e74705SXin Li // RUN: %clang_cl /Gs0 -### -- %s 2>&1 | FileCheck -check-prefix=Gs0 %s
81*67e74705SXin Li // Gs0: "-mstack-probe-size=0"
82*67e74705SXin Li // RUN: %clang_cl /Gs4096 -### -- %s 2>&1 | FileCheck -check-prefix=Gs4096 %s
83*67e74705SXin Li // Gs4096: "-mstack-probe-size=4096"
84*67e74705SXin Li
85*67e74705SXin Li // RUN: %clang_cl /Gw -### -- %s 2>&1 | FileCheck -check-prefix=Gw %s
86*67e74705SXin Li // Gw: -fdata-sections
87*67e74705SXin Li
88*67e74705SXin Li // RUN: %clang_cl /Gw /Gw- -### -- %s 2>&1 | FileCheck -check-prefix=Gw_ %s
89*67e74705SXin Li // Gw_-NOT: -fdata-sections
90*67e74705SXin Li
91*67e74705SXin Li // RUN: %clang_cl /Imyincludedir -### -- %s 2>&1 | FileCheck -check-prefix=SLASH_I %s
92*67e74705SXin Li // RUN: %clang_cl /I myincludedir -### -- %s 2>&1 | FileCheck -check-prefix=SLASH_I %s
93*67e74705SXin Li // SLASH_I: "-I" "myincludedir"
94*67e74705SXin Li
95*67e74705SXin Li // RUN: %clang_cl /imsvcmyincludedir -### -- %s 2>&1 | FileCheck -check-prefix=SLASH_imsvc %s
96*67e74705SXin Li // RUN: %clang_cl /imsvc myincludedir -### -- %s 2>&1 | FileCheck -check-prefix=SLASH_imsvc %s
97*67e74705SXin Li // Clang's resource header directory should be first:
98*67e74705SXin Li // SLASH_imsvc: "-internal-isystem" "{{[^"]*}}lib{{(64)?/|\\\\}}clang{{[^"]*}}include"
99*67e74705SXin Li // SLASH_imsvc: "-internal-isystem" "myincludedir"
100*67e74705SXin Li
101*67e74705SXin Li // RUN: %clang_cl /J -### -- %s 2>&1 | FileCheck -check-prefix=J %s
102*67e74705SXin Li // J: -fno-signed-char
103*67e74705SXin Li
104*67e74705SXin Li // RUN: %clang_cl /Ofoo -### -- %s 2>&1 | FileCheck -check-prefix=O %s
105*67e74705SXin Li // O: /Ofoo
106*67e74705SXin Li
107*67e74705SXin Li // RUN: %clang_cl /Ob0 -### -- %s 2>&1 | FileCheck -check-prefix=Ob0 %s
108*67e74705SXin Li // Ob0: -fno-inline
109*67e74705SXin Li
110*67e74705SXin Li // RUN: %clang_cl /Ob2 -### -- %s 2>&1 | FileCheck -check-prefix=Ob2 %s
111*67e74705SXin Li // RUN: %clang_cl /Odb2 -### -- %s 2>&1 | FileCheck -check-prefix=Ob2 %s
112*67e74705SXin Li // RUN: %clang_cl /O2 /Ob2 -### -- %s 2>&1 | FileCheck -check-prefix=Ob2 %s
113*67e74705SXin Li // Ob2-NOT: warning: argument unused during compilation: '/O2'
114*67e74705SXin Li // Ob2: -finline-functions
115*67e74705SXin Li
116*67e74705SXin Li // RUN: %clang_cl /Ob1 -### -- %s 2>&1 | FileCheck -check-prefix=Ob1 %s
117*67e74705SXin Li // RUN: %clang_cl /Odb1 -### -- %s 2>&1 | FileCheck -check-prefix=Ob1 %s
118*67e74705SXin Li // Ob1: -finline-hint-functions
119*67e74705SXin Li
120*67e74705SXin Li // RUN: %clang_cl /Od -### -- %s 2>&1 | FileCheck -check-prefix=Od %s
121*67e74705SXin Li // Od: -O0
122*67e74705SXin Li
123*67e74705SXin Li // RUN: %clang_cl /Oi- /Oi -### -- %s 2>&1 | FileCheck -check-prefix=Oi %s
124*67e74705SXin Li // Oi-NOT: -fno-builtin
125*67e74705SXin Li
126*67e74705SXin Li // RUN: %clang_cl /Oi- -### -- %s 2>&1 | FileCheck -check-prefix=Oi_ %s
127*67e74705SXin Li // Oi_: -fno-builtin
128*67e74705SXin Li
129*67e74705SXin Li // RUN: %clang_cl /Os --target=i686-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Os %s
130*67e74705SXin Li // RUN: %clang_cl /Os --target=x86_64-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Os %s
131*67e74705SXin Li // Os-NOT: -mdisable-fp-elim
132*67e74705SXin Li // Os: -momit-leaf-frame-pointer
133*67e74705SXin Li // Os: -Os
134*67e74705SXin Li
135*67e74705SXin Li // RUN: %clang_cl /Ot --target=i686-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Ot %s
136*67e74705SXin Li // RUN: %clang_cl /Ot --target=x86_64-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Ot %s
137*67e74705SXin Li // Ot-NOT: -mdisable-fp-elim
138*67e74705SXin Li // Ot: -momit-leaf-frame-pointer
139*67e74705SXin Li // Ot: -O2
140*67e74705SXin Li
141*67e74705SXin Li // RUN: %clang_cl /Ox --target=i686-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Ox %s
142*67e74705SXin Li // RUN: %clang_cl /Ox --target=x86_64-pc-windows-msvc -### -- %s 2>&1 | FileCheck -check-prefix=Ox %s
143*67e74705SXin Li // Ox-NOT: -mdisable-fp-elim
144*67e74705SXin Li // Ox: -momit-leaf-frame-pointer
145*67e74705SXin Li // Ox: -O2
146*67e74705SXin Li
147*67e74705SXin Li // RUN: %clang_cl --target=i686-pc-win32 /O2sy- -### -- %s 2>&1 | FileCheck -check-prefix=PR24003 %s
148*67e74705SXin Li // PR24003: -mdisable-fp-elim
149*67e74705SXin Li // PR24003: -momit-leaf-frame-pointer
150*67e74705SXin Li // PR24003: -Os
151*67e74705SXin Li
152*67e74705SXin Li // RUN: %clang_cl --target=i686-pc-win32 -Werror /Oy- /O2 -### -- %s 2>&1 | FileCheck -check-prefix=Oy_2 %s
153*67e74705SXin Li // Oy_2: -momit-leaf-frame-pointer
154*67e74705SXin Li // Oy_2: -O2
155*67e74705SXin Li
156*67e74705SXin Li // RUN: %clang_cl /Zs -Werror /Oy -- %s 2>&1
157*67e74705SXin Li
158*67e74705SXin Li // RUN: %clang_cl --target=i686-pc-win32 -Werror /Oy- -### -- %s 2>&1 | FileCheck -check-prefix=Oy_ %s
159*67e74705SXin Li // Oy_: -mdisable-fp-elim
160*67e74705SXin Li
161*67e74705SXin Li // RUN: %clang_cl /Qvec -### -- %s 2>&1 | FileCheck -check-prefix=Qvec %s
162*67e74705SXin Li // Qvec: -vectorize-loops
163*67e74705SXin Li
164*67e74705SXin Li // RUN: %clang_cl /Qvec /Qvec- -### -- %s 2>&1 | FileCheck -check-prefix=Qvec_ %s
165*67e74705SXin Li // Qvec_-NOT: -vectorize-loops
166*67e74705SXin Li
167*67e74705SXin Li // RUN: %clang_cl /showIncludes -### -- %s 2>&1 | FileCheck -check-prefix=showIncludes %s
168*67e74705SXin Li // showIncludes: --show-includes
169*67e74705SXin Li
170*67e74705SXin Li // RUN: %clang_cl /E /showIncludes -### -- %s 2>&1 | FileCheck -check-prefix=showIncludes_E %s
171*67e74705SXin Li // RUN: %clang_cl /EP /showIncludes -### -- %s 2>&1 | FileCheck -check-prefix=showIncludes_E %s
172*67e74705SXin Li // showIncludes_E: warning: argument unused during compilation: '--show-includes'
173*67e74705SXin Li
174*67e74705SXin Li // RUN: %clang_cl /Umymacro -### -- %s 2>&1 | FileCheck -check-prefix=U %s
175*67e74705SXin Li // RUN: %clang_cl /U mymacro -### -- %s 2>&1 | FileCheck -check-prefix=U %s
176*67e74705SXin Li // U: "-U" "mymacro"
177*67e74705SXin Li
178*67e74705SXin Li // RUN: %clang_cl /vd2 -### -- %s 2>&1 | FileCheck -check-prefix=VD2 %s
179*67e74705SXin Li // VD2: -vtordisp-mode=2
180*67e74705SXin Li
181*67e74705SXin Li // RUN: %clang_cl /vmg -### -- %s 2>&1 | FileCheck -check-prefix=VMG %s
182*67e74705SXin Li // VMG: "-fms-memptr-rep=virtual"
183*67e74705SXin Li
184*67e74705SXin Li // RUN: %clang_cl /vmg /vms -### -- %s 2>&1 | FileCheck -check-prefix=VMS %s
185*67e74705SXin Li // VMS: "-fms-memptr-rep=single"
186*67e74705SXin Li
187*67e74705SXin Li // RUN: %clang_cl /vmg /vmm -### -- %s 2>&1 | FileCheck -check-prefix=VMM %s
188*67e74705SXin Li // VMM: "-fms-memptr-rep=multiple"
189*67e74705SXin Li
190*67e74705SXin Li // RUN: %clang_cl /vmg /vmv -### -- %s 2>&1 | FileCheck -check-prefix=VMV %s
191*67e74705SXin Li // VMV: "-fms-memptr-rep=virtual"
192*67e74705SXin Li
193*67e74705SXin Li // RUN: %clang_cl /vmg /vmb -### -- %s 2>&1 | FileCheck -check-prefix=VMB %s
194*67e74705SXin Li // VMB: '/vmg' not allowed with '/vmb'
195*67e74705SXin Li
196*67e74705SXin Li // RUN: %clang_cl /vmg /vmm /vms -### -- %s 2>&1 | FileCheck -check-prefix=VMX %s
197*67e74705SXin Li // VMX: '/vms' not allowed with '/vmm'
198*67e74705SXin Li
199*67e74705SXin Li // RUN: %clang_cl /volatile:iso -### -- %s 2>&1 | FileCheck -check-prefix=VOLATILE-ISO %s
200*67e74705SXin Li // VOLATILE-ISO-NOT: "-fms-volatile"
201*67e74705SXin Li
202*67e74705SXin Li // RUN: %clang_cl /volatile:ms -### -- %s 2>&1 | FileCheck -check-prefix=VOLATILE-MS %s
203*67e74705SXin Li // VOLATILE-MS: "-fms-volatile"
204*67e74705SXin Li
205*67e74705SXin Li // RUN: %clang_cl /W0 -### -- %s 2>&1 | FileCheck -check-prefix=W0 %s
206*67e74705SXin Li // W0: -w
207*67e74705SXin Li
208*67e74705SXin Li // RUN: %clang_cl /W1 -### -- %s 2>&1 | FileCheck -check-prefix=W1 %s
209*67e74705SXin Li // RUN: %clang_cl /W2 -### -- %s 2>&1 | FileCheck -check-prefix=W1 %s
210*67e74705SXin Li // RUN: %clang_cl /W3 -### -- %s 2>&1 | FileCheck -check-prefix=W1 %s
211*67e74705SXin Li // RUN: %clang_cl /W4 -### -- %s 2>&1 | FileCheck -check-prefix=W4 %s
212*67e74705SXin Li // RUN: %clang_cl /Wall -### -- %s 2>&1 | FileCheck -check-prefix=W4 %s
213*67e74705SXin Li // W1: -Wall
214*67e74705SXin Li // W4: -WCL4
215*67e74705SXin Li
216*67e74705SXin Li // RUN: %clang_cl /WX -### -- %s 2>&1 | FileCheck -check-prefix=WX %s
217*67e74705SXin Li // WX: -Werror
218*67e74705SXin Li
219*67e74705SXin Li // RUN: %clang_cl /WX- -### -- %s 2>&1 | FileCheck -check-prefix=WX_ %s
220*67e74705SXin Li // WX_: -Wno-error
221*67e74705SXin Li
222*67e74705SXin Li // RUN: %clang_cl /w -### -- %s 2>&1 | FileCheck -check-prefix=w %s
223*67e74705SXin Li // w: -w
224*67e74705SXin Li
225*67e74705SXin Li // RUN: %clang_cl /Zp -### -- %s 2>&1 | FileCheck -check-prefix=ZP %s
226*67e74705SXin Li // ZP: -fpack-struct=1
227*67e74705SXin Li
228*67e74705SXin Li // RUN: %clang_cl /Zp2 -### -- %s 2>&1 | FileCheck -check-prefix=ZP2 %s
229*67e74705SXin Li // ZP2: -fpack-struct=2
230*67e74705SXin Li
231*67e74705SXin Li // RUN: %clang_cl /Zs -### -- %s 2>&1 | FileCheck -check-prefix=Zs %s
232*67e74705SXin Li // Zs: -fsyntax-only
233*67e74705SXin Li
234*67e74705SXin Li // RUN: %clang_cl /FIasdf.h -### -- %s 2>&1 | FileCheck -check-prefix=FI %s
235*67e74705SXin Li // FI: "-include" "asdf.h"
236*67e74705SXin Li
237*67e74705SXin Li // RUN: %clang_cl /FI asdf.h -### -- %s 2>&1 | FileCheck -check-prefix=FI_ %s
238*67e74705SXin Li // FI_: "-include" "asdf.h"
239*67e74705SXin Li
240*67e74705SXin Li // RUN: %clang_cl /TP /c -### -- %s 2>&1 | FileCheck -check-prefix=NO-GX %s
241*67e74705SXin Li // NO-GX-NOT: "-fcxx-exceptions" "-fexceptions"
242*67e74705SXin Li
243*67e74705SXin Li // RUN: %clang_cl /TP /c /GX -### -- %s 2>&1 | FileCheck -check-prefix=GX %s
244*67e74705SXin Li // GX: "-fcxx-exceptions" "-fexceptions"
245*67e74705SXin Li
246*67e74705SXin Li // RUN: %clang_cl /TP /c /GX /GX- -### -- %s 2>&1 | FileCheck -check-prefix=GX_ %s
247*67e74705SXin Li // GX_-NOT: "-fcxx-exceptions" "-fexceptions"
248*67e74705SXin Li
249*67e74705SXin Li // We forward any unrecognized -W diagnostic options to cc1.
250*67e74705SXin Li // RUN: %clang_cl -Wunused-pragmas -### -- %s 2>&1 | FileCheck -check-prefix=WJoined %s
251*67e74705SXin Li // WJoined: "-cc1"
252*67e74705SXin Li // WJoined: "-Wunused-pragmas"
253*67e74705SXin Li
254*67e74705SXin Li // We recognize -f[no-]strict-aliasing.
255*67e74705SXin Li // RUN: %clang_cl -c -### -- %s 2>&1 | FileCheck -check-prefix=DEFAULTSTRICT %s
256*67e74705SXin Li // DEFAULTSTRICT: "-relaxed-aliasing"
257*67e74705SXin Li // RUN: %clang_cl -c -fstrict-aliasing -### -- %s 2>&1 | FileCheck -check-prefix=STRICT %s
258*67e74705SXin Li // STRICT-NOT: "-relaxed-aliasing"
259*67e74705SXin Li // RUN: %clang_cl -c -fno-strict-aliasing -### -- %s 2>&1 | FileCheck -check-prefix=NOSTRICT %s
260*67e74705SXin Li // NOSTRICT: "-relaxed-aliasing"
261*67e74705SXin Li
262*67e74705SXin Li // For some warning ids, we can map from MSVC warning to Clang warning.
263*67e74705SXin Li // RUN: %clang_cl -wd4005 -wd4100 -wd4910 -wd4996 -### -- %s 2>&1 | FileCheck -check-prefix=Wno %s
264*67e74705SXin Li // Wno: "-cc1"
265*67e74705SXin Li // Wno: "-Wno-macro-redefined"
266*67e74705SXin Li // Wno: "-Wno-unused-parameter"
267*67e74705SXin Li // Wno: "-Wno-dllexport-explicit-instantiation-decl"
268*67e74705SXin Li // Wno: "-Wno-deprecated-declarations"
269*67e74705SXin Li
270*67e74705SXin Li // Ignored options. Check that we don't get "unused during compilation" errors.
271*67e74705SXin Li // RUN: %clang_cl /c \
272*67e74705SXin Li // RUN: /analyze- \
273*67e74705SXin Li // RUN: /bigobj \
274*67e74705SXin Li // RUN: /cgthreads4 \
275*67e74705SXin Li // RUN: /cgthreads8 \
276*67e74705SXin Li // RUN: /d2FastFail \
277*67e74705SXin Li // RUN: /d2Zi+ \
278*67e74705SXin Li // RUN: /errorReport:foo \
279*67e74705SXin Li // RUN: /FC \
280*67e74705SXin Li // RUN: /Fdfoo \
281*67e74705SXin Li // RUN: /FS \
282*67e74705SXin Li // RUN: /Gd \
283*67e74705SXin Li // RUN: /GF \
284*67e74705SXin Li // RUN: /GS- \
285*67e74705SXin Li // RUN: /kernel- \
286*67e74705SXin Li // RUN: /nologo \
287*67e74705SXin Li // RUN: /openmp- \
288*67e74705SXin Li // RUN: /RTC1 \
289*67e74705SXin Li // RUN: /sdl \
290*67e74705SXin Li // RUN: /sdl- \
291*67e74705SXin Li // RUN: /vmg \
292*67e74705SXin Li // RUN: /volatile:iso \
293*67e74705SXin Li // RUN: /w12345 \
294*67e74705SXin Li // RUN: /wd1234 \
295*67e74705SXin Li // RUN: /Zo \
296*67e74705SXin Li // RUN: /Zo- \
297*67e74705SXin Li // RUN: -### -- %s 2>&1 | FileCheck -check-prefix=IGNORED %s
298*67e74705SXin Li // IGNORED-NOT: argument unused during compilation
299*67e74705SXin Li // IGNORED-NOT: no such file or directory
300*67e74705SXin Li // Don't confuse /openmp- with the /o flag:
301*67e74705SXin Li // IGNORED-NOT: "-o" "penmp-.obj"
302*67e74705SXin Li
303*67e74705SXin Li // Ignored options and compile-only options are ignored for link jobs.
304*67e74705SXin Li // RUN: touch %t.obj
305*67e74705SXin Li // RUN: %clang_cl /nologo -### -- %t.obj 2>&1 | FileCheck -check-prefix=LINKUNUSED %s
306*67e74705SXin Li // RUN: %clang_cl /Dfoo -### -- %t.obj 2>&1 | FileCheck -check-prefix=LINKUNUSED %s
307*67e74705SXin Li // RUN: %clang_cl /MD -### -- %t.obj 2>&1 | FileCheck -check-prefix=LINKUNUSED %s
308*67e74705SXin Li // LINKUNUSED-NOT: argument unused during compilation
309*67e74705SXin Li
310*67e74705SXin Li // Support ignoring warnings about unused arguments.
311*67e74705SXin Li // RUN: %clang_cl /Abracadabra -Qunused-arguments -### -- %s 2>&1 | FileCheck -check-prefix=UNUSED %s
312*67e74705SXin Li // UNUSED-NOT: argument unused during compilation
313*67e74705SXin Li
314*67e74705SXin Li // Unsupported but parsed options. Check that we don't error on them.
315*67e74705SXin Li // (/Zs is for syntax-only)
316*67e74705SXin Li // RUN: %clang_cl /Zs \
317*67e74705SXin Li // RUN: /AIfoo \
318*67e74705SXin Li // RUN: /clr:pure \
319*67e74705SXin Li // RUN: /docname \
320*67e74705SXin Li // RUN: /EHsc \
321*67e74705SXin Li // RUN: /F \
322*67e74705SXin Li // RUN: /FA \
323*67e74705SXin Li // RUN: /FAc \
324*67e74705SXin Li // RUN: /Fafilename \
325*67e74705SXin Li // RUN: /FAs \
326*67e74705SXin Li // RUN: /FAu \
327*67e74705SXin Li // RUN: /favor:blend \
328*67e74705SXin Li // RUN: /FC \
329*67e74705SXin Li // RUN: /Fifoo \
330*67e74705SXin Li // RUN: /Fmfoo \
331*67e74705SXin Li // RUN: /FpDebug\main.pch \
332*67e74705SXin Li // RUN: /Frfoo \
333*67e74705SXin Li // RUN: /FRfoo \
334*67e74705SXin Li // RUN: /FU foo \
335*67e74705SXin Li // RUN: /Fx \
336*67e74705SXin Li // RUN: /G1 \
337*67e74705SXin Li // RUN: /G2 \
338*67e74705SXin Li // RUN: /GA \
339*67e74705SXin Li // RUN: /Gd \
340*67e74705SXin Li // RUN: /Ge \
341*67e74705SXin Li // RUN: /Gh \
342*67e74705SXin Li // RUN: /GH \
343*67e74705SXin Li // RUN: /GL \
344*67e74705SXin Li // RUN: /GL- \
345*67e74705SXin Li // RUN: /Gm \
346*67e74705SXin Li // RUN: /Gm- \
347*67e74705SXin Li // RUN: /Gr \
348*67e74705SXin Li // RUN: /GS \
349*67e74705SXin Li // RUN: /GT \
350*67e74705SXin Li // RUN: /guard:cf \
351*67e74705SXin Li // RUN: /guard:cf- \
352*67e74705SXin Li // RUN: /GX \
353*67e74705SXin Li // RUN: /Gv \
354*67e74705SXin Li // RUN: /Gz \
355*67e74705SXin Li // RUN: /GZ \
356*67e74705SXin Li // RUN: /H \
357*67e74705SXin Li // RUN: /homeparams \
358*67e74705SXin Li // RUN: /hotpatch \
359*67e74705SXin Li // RUN: /kernel \
360*67e74705SXin Li // RUN: /LN \
361*67e74705SXin Li // RUN: /MP \
362*67e74705SXin Li // RUN: /o foo.obj \
363*67e74705SXin Li // RUN: /ofoo.obj \
364*67e74705SXin Li // RUN: /openmp \
365*67e74705SXin Li // RUN: /Qfast_transcendentals \
366*67e74705SXin Li // RUN: /QIfist \
367*67e74705SXin Li // RUN: /Qimprecise_fwaits \
368*67e74705SXin Li // RUN: /Qpar \
369*67e74705SXin Li // RUN: /Qvec-report:2 \
370*67e74705SXin Li // RUN: /u \
371*67e74705SXin Li // RUN: /V \
372*67e74705SXin Li // RUN: /volatile:ms \
373*67e74705SXin Li // RUN: /wfoo \
374*67e74705SXin Li // RUN: /WL \
375*67e74705SXin Li // RUN: /Wp64 \
376*67e74705SXin Li // RUN: /X \
377*67e74705SXin Li // RUN: /Y- \
378*67e74705SXin Li // RUN: /Yc \
379*67e74705SXin Li // RUN: /Ycstdafx.h \
380*67e74705SXin Li // RUN: /Yd \
381*67e74705SXin Li // RUN: /Yl- \
382*67e74705SXin Li // RUN: /Ylfoo \
383*67e74705SXin Li // RUN: /Yustdafx.h \
384*67e74705SXin Li // RUN: /Z7 \
385*67e74705SXin Li // RUN: /Za \
386*67e74705SXin Li // RUN: /Ze \
387*67e74705SXin Li // RUN: /Zg \
388*67e74705SXin Li // RUN: /Zi \
389*67e74705SXin Li // RUN: /ZI \
390*67e74705SXin Li // RUN: /Zl \
391*67e74705SXin Li // RUN: /ZW:nostdlib \
392*67e74705SXin Li // RUN: -- %s 2>&1
393*67e74705SXin Li
394*67e74705SXin Li // We support -Xclang for forwarding options to cc1.
395*67e74705SXin Li // RUN: %clang_cl -Xclang hellocc1 -### -- %s 2>&1 | FileCheck -check-prefix=Xclang %s
396*67e74705SXin Li // Xclang: "-cc1"
397*67e74705SXin Li // Xclang: "hellocc1"
398*67e74705SXin Li
399*67e74705SXin Li // RTTI is on by default. /GR- controls -fno-rtti-data.
400*67e74705SXin Li // RUN: %clang_cl /c /GR- -### -- %s 2>&1 | FileCheck -check-prefix=NoRTTI %s
401*67e74705SXin Li // NoRTTI: "-fno-rtti-data"
402*67e74705SXin Li // NoRTTI-NOT: "-fno-rtti"
403*67e74705SXin Li // RUN: %clang_cl /c /GR -### -- %s 2>&1 | FileCheck -check-prefix=RTTI %s
404*67e74705SXin Li // RTTI-NOT: "-fno-rtti-data"
405*67e74705SXin Li // RTTI-NOT: "-fno-rtti"
406*67e74705SXin Li
407*67e74705SXin Li // thread safe statics are off for versions < 19.
408*67e74705SXin Li // RUN: %clang_cl /c -### -fms-compatibility-version=18 -- %s 2>&1 | FileCheck -check-prefix=NoThreadSafeStatics %s
409*67e74705SXin Li // RUN: %clang_cl /Zc:threadSafeInit /Zc:threadSafeInit- /c -### -- %s 2>&1 | FileCheck -check-prefix=NoThreadSafeStatics %s
410*67e74705SXin Li // NoThreadSafeStatics: "-fno-threadsafe-statics"
411*67e74705SXin Li
412*67e74705SXin Li // RUN: %clang_cl /Zc:threadSafeInit /c -### -- %s 2>&1 | FileCheck -check-prefix=ThreadSafeStatics %s
413*67e74705SXin Li // ThreadSafeStatics-NOT: "-fno-threadsafe-statics"
414*67e74705SXin Li
415*67e74705SXin Li // RUN: %clang_cl /Zi /c -### -- %s 2>&1 | FileCheck -check-prefix=Zi %s
416*67e74705SXin Li // Zi: "-gcodeview"
417*67e74705SXin Li // Zi: "-debug-info-kind=limited"
418*67e74705SXin Li
419*67e74705SXin Li // RUN: %clang_cl /Z7 /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7 %s
420*67e74705SXin Li // Z7: "-gcodeview"
421*67e74705SXin Li // Z7: "-debug-info-kind=limited"
422*67e74705SXin Li
423*67e74705SXin Li // RUN: %clang_cl /Zd /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7GMLT %s
424*67e74705SXin Li // Z7GMLT: "-gcodeview"
425*67e74705SXin Li // Z7GMLT: "-debug-info-kind=line-tables-only"
426*67e74705SXin Li
427*67e74705SXin Li // RUN: %clang_cl /c -### -- %s 2>&1 | FileCheck -check-prefix=BreproDefault %s
428*67e74705SXin Li // BreproDefault: "-mincremental-linker-compatible"
429*67e74705SXin Li
430*67e74705SXin Li // RUN: %clang_cl /Brepro- /Brepro /c '-###' -- %s 2>&1 | FileCheck -check-prefix=Brepro %s
431*67e74705SXin Li // Brepro: "-mincremental-linker-compatible"
432*67e74705SXin Li
433*67e74705SXin Li // RUN: %clang_cl /Brepro /Brepro- /c '-###' -- %s 2>&1 | FileCheck -check-prefix=Brepro_ %s
434*67e74705SXin Li // Brepro_-NOT: "-mincremental-linker-compatible"
435*67e74705SXin Li
436*67e74705SXin Li // This test was super sneaky: "/Z7" means "line-tables", but "-gdwarf" occurs
437*67e74705SXin Li // later on the command line, so it should win. Interestingly the cc1 arguments
438*67e74705SXin Li // came out right, but had wrong semantics, because an invariant assumed by
439*67e74705SXin Li // CompilerInvocation was violated: it expects that at most one of {gdwarfN,
440*67e74705SXin Li // line-tables-only} appear. If you assume that, then you can safely use
441*67e74705SXin Li // Args.hasArg to test whether a boolean flag is present without caring
442*67e74705SXin Li // where it appeared. And for this test, it appeared to the left of -gdwarf
443*67e74705SXin Li // which made it "win". This test could not detect that bug.
444*67e74705SXin Li // RUN: %clang_cl /Z7 -gdwarf /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7_gdwarf %s
445*67e74705SXin Li // Z7_gdwarf: "-gcodeview"
446*67e74705SXin Li // Z7_gdwarf: "-debug-info-kind=limited"
447*67e74705SXin Li // Z7_gdwarf: "-dwarf-version=4"
448*67e74705SXin Li
449*67e74705SXin Li // RUN: %clang_cl -fmsc-version=1800 -TP -### -- %s 2>&1 | FileCheck -check-prefix=CXX11 %s
450*67e74705SXin Li // CXX11: -std=c++11
451*67e74705SXin Li
452*67e74705SXin Li // RUN: %clang_cl -fmsc-version=1900 -TP -### -- %s 2>&1 | FileCheck -check-prefix=CXX14 %s
453*67e74705SXin Li // CXX14: -std=c++14
454*67e74705SXin Li
455*67e74705SXin Li // RUN: %clang_cl -fmsc-version=1900 -TP -std:c++14 -### -- %s 2>&1 | FileCheck -check-prefix=STDCXX14 %s
456*67e74705SXin Li // STDCXX14: -std=c++14
457*67e74705SXin Li
458*67e74705SXin Li // RUN: %clang_cl -fmsc-version=1900 -TP -std:c++latest -### -- %s 2>&1 | FileCheck -check-prefix=STDCXXLATEST %s
459*67e74705SXin Li // STDCXXLATEST: -std=c++1z
460*67e74705SXin Li
461*67e74705SXin Li // RUN: env CL="/Gy" %clang_cl -### -- %s 2>&1 | FileCheck -check-prefix=ENV-CL %s
462*67e74705SXin Li // ENV-CL: "-ffunction-sections"
463*67e74705SXin Li
464*67e74705SXin Li // RUN: env CL="/Gy" _CL_="/Gy- -- %s" %clang_cl -### 2>&1 | FileCheck -check-prefix=ENV-_CL_ %s
465*67e74705SXin Li // ENV-_CL_-NOT: "-ffunction-sections"
466*67e74705SXin Li
467*67e74705SXin Li // Accept "core" clang options.
468*67e74705SXin Li // (/Zs is for syntax-only, -Werror makes it fail hard on unknown options)
469*67e74705SXin Li // RUN: %clang_cl \
470*67e74705SXin Li // RUN: --driver-mode=cl \
471*67e74705SXin Li // RUN: -fcolor-diagnostics \
472*67e74705SXin Li // RUN: -fno-color-diagnostics \
473*67e74705SXin Li // RUN: -fdiagnostics-color \
474*67e74705SXin Li // RUN: -fno-diagnostics-color \
475*67e74705SXin Li // RUN: -fdiagnostics-parseable-fixits \
476*67e74705SXin Li // RUN: -ferror-limit=10 \
477*67e74705SXin Li // RUN: -fmsc-version=1800 \
478*67e74705SXin Li // RUN: -fno-strict-aliasing \
479*67e74705SXin Li // RUN: -fstrict-aliasing \
480*67e74705SXin Li // RUN: -fsyntax-only \
481*67e74705SXin Li // RUN: -fms-compatibility \
482*67e74705SXin Li // RUN: -fno-ms-compatibility \
483*67e74705SXin Li // RUN: -fms-extensions \
484*67e74705SXin Li // RUN: -fno-ms-extensions \
485*67e74705SXin Li // RUN: -mllvm -disable-llvm-optzns \
486*67e74705SXin Li // RUN: -resource-dir \
487*67e74705SXin Li // RUN: -Wunused-variable \
488*67e74705SXin Li // RUN: -fmacro-backtrace-limit=0 \
489*67e74705SXin Li // RUN: -Werror /Zs -- %s 2>&1
490*67e74705SXin Li
491*67e74705SXin Li
f()492*67e74705SXin Li void f() { }
493