]> git.proxmox.com Git - rustc.git/blame - vendor/cc/tests/test.rs
New upstream version 1.67.1+dfsg1
[rustc.git] / vendor / cc / tests / test.rs
CommitLineData
60c5eb7d 1use crate::support::Test;
476ff2be
SL
2
3mod support;
4
ba9703b0
XL
5// Some tests check that a flag is *not* present. These tests might fail if the flag is set in the
6// CFLAGS or CXXFLAGS environment variables. This function clears the CFLAGS and CXXFLAGS
7// variables to make sure that the tests can run correctly.
8fn reset_env() {
9 std::env::set_var("CFLAGS", "");
10 std::env::set_var("CXXFLAGS", "");
11}
12
476ff2be
SL
13#[test]
14fn gnu_smoke() {
ba9703b0
XL
15 reset_env();
16
476ff2be 17 let test = Test::gnu();
0531ce1d 18 test.gcc().file("foo.c").compile("foo");
8bb4bdeb
XL
19
20 test.cmd(0)
21 .must_have("-O2")
22 .must_have("foo.c")
23 .must_not_have("-g")
24 .must_have("-c")
25 .must_have("-ffunction-sections")
26 .must_have("-fdata-sections");
476ff2be
SL
27 test.cmd(1).must_have(test.td.path().join("foo.o"));
28}
29
30#[test]
31fn gnu_opt_level_1() {
ba9703b0
XL
32 reset_env();
33
476ff2be 34 let test = Test::gnu();
0531ce1d 35 test.gcc().opt_level(1).file("foo.c").compile("foo");
476ff2be 36
0531ce1d 37 test.cmd(0).must_have("-O1").must_not_have("-O2");
476ff2be
SL
38}
39
40#[test]
41fn gnu_opt_level_s() {
ba9703b0
XL
42 reset_env();
43
476ff2be 44 let test = Test::gnu();
0531ce1d 45 test.gcc().opt_level_str("s").file("foo.c").compile("foo");
476ff2be 46
8bb4bdeb
XL
47 test.cmd(0)
48 .must_have("-Os")
49 .must_not_have("-O1")
50 .must_not_have("-O2")
51 .must_not_have("-O3")
52 .must_not_have("-Oz");
476ff2be
SL
53}
54
55#[test]
60c5eb7d
XL
56fn gnu_debug_fp_auto() {
57 let test = Test::gnu();
58 test.gcc().debug(true).file("foo.c").compile("foo");
59 test.cmd(0).must_have("-g");
60 test.cmd(0).must_have("-fno-omit-frame-pointer");
61}
62
63#[test]
64fn gnu_debug_fp() {
476ff2be 65 let test = Test::gnu();
0531ce1d 66 test.gcc().debug(true).file("foo.c").compile("foo");
476ff2be 67 test.cmd(0).must_have("-g");
60c5eb7d
XL
68 test.cmd(0).must_have("-fno-omit-frame-pointer");
69}
70
71#[test]
72fn gnu_debug_nofp() {
ba9703b0
XL
73 reset_env();
74
60c5eb7d
XL
75 let test = Test::gnu();
76 test.gcc()
77 .debug(true)
78 .force_frame_pointer(false)
79 .file("foo.c")
80 .compile("foo");
81 test.cmd(0).must_have("-g");
82 test.cmd(0).must_not_have("-fno-omit-frame-pointer");
83
84 let test = Test::gnu();
85 test.gcc()
86 .force_frame_pointer(false)
87 .debug(true)
88 .file("foo.c")
89 .compile("foo");
90 test.cmd(0).must_have("-g");
91 test.cmd(0).must_not_have("-fno-omit-frame-pointer");
476ff2be
SL
92}
93
ea8adc8c
XL
94#[test]
95fn gnu_warnings_into_errors() {
96 let test = Test::gnu();
97 test.gcc()
98 .warnings_into_errors(true)
99 .file("foo.c")
100 .compile("foo");
101
102 test.cmd(0).must_have("-Werror");
103}
104
105#[test]
106fn gnu_warnings() {
107 let test = Test::gnu();
108 test.gcc()
109 .warnings(true)
abe05a73 110 .flag("-Wno-missing-field-initializers")
ea8adc8c
XL
111 .file("foo.c")
112 .compile("foo");
113
0531ce1d 114 test.cmd(0).must_have("-Wall").must_have("-Wextra");
94b46f34
XL
115}
116
117#[test]
118fn gnu_extra_warnings0() {
ba9703b0
XL
119 reset_env();
120
94b46f34
XL
121 let test = Test::gnu();
122 test.gcc()
123 .warnings(true)
124 .extra_warnings(false)
125 .flag("-Wno-missing-field-initializers")
126 .file("foo.c")
127 .compile("foo");
128
129 test.cmd(0).must_have("-Wall").must_not_have("-Wextra");
130}
131
132#[test]
133fn gnu_extra_warnings1() {
ba9703b0
XL
134 reset_env();
135
94b46f34
XL
136 let test = Test::gnu();
137 test.gcc()
138 .warnings(false)
139 .extra_warnings(true)
140 .flag("-Wno-missing-field-initializers")
141 .file("foo.c")
142 .compile("foo");
143
144 test.cmd(0).must_not_have("-Wall").must_have("-Wextra");
ea8adc8c
XL
145}
146
abe05a73
XL
147#[test]
148fn gnu_warnings_overridable() {
ba9703b0
XL
149 reset_env();
150
abe05a73
XL
151 let test = Test::gnu();
152 test.gcc()
153 .warnings(true)
154 .flag("-Wno-missing-field-initializers")
155 .file("foo.c")
156 .compile("foo");
157
0531ce1d
XL
158 test.cmd(0)
159 .must_have_in_order("-Wall", "-Wno-missing-field-initializers");
abe05a73
XL
160}
161
476ff2be
SL
162#[test]
163fn gnu_x86_64() {
164 for vendor in &["unknown-linux-gnu", "apple-darwin"] {
165 let target = format!("x86_64-{}", vendor);
166 let test = Test::gnu();
167 test.gcc()
168 .target(&target)
169 .host(&target)
8bb4bdeb 170 .file("foo.c")
ea8adc8c 171 .compile("foo");
476ff2be 172
0531ce1d 173 test.cmd(0).must_have("-fPIC").must_have("-m64");
476ff2be
SL
174 }
175}
176
177#[test]
178fn gnu_x86_64_no_pic() {
ba9703b0
XL
179 reset_env();
180
476ff2be
SL
181 for vendor in &["unknown-linux-gnu", "apple-darwin"] {
182 let target = format!("x86_64-{}", vendor);
183 let test = Test::gnu();
184 test.gcc()
185 .pic(false)
186 .target(&target)
187 .host(&target)
8bb4bdeb 188 .file("foo.c")
ea8adc8c 189 .compile("foo");
476ff2be
SL
190
191 test.cmd(0).must_not_have("-fPIC");
192 }
193}
194
195#[test]
196fn gnu_i686() {
197 for vendor in &["unknown-linux-gnu", "apple-darwin"] {
198 let target = format!("i686-{}", vendor);
199 let test = Test::gnu();
200 test.gcc()
201 .target(&target)
202 .host(&target)
8bb4bdeb 203 .file("foo.c")
ea8adc8c 204 .compile("foo");
476ff2be 205
0531ce1d 206 test.cmd(0).must_have("-m32");
476ff2be
SL
207 }
208}
209
210#[test]
211fn gnu_i686_pic() {
212 for vendor in &["unknown-linux-gnu", "apple-darwin"] {
213 let target = format!("i686-{}", vendor);
214 let test = Test::gnu();
215 test.gcc()
216 .pic(true)
217 .target(&target)
218 .host(&target)
8bb4bdeb 219 .file("foo.c")
ea8adc8c 220 .compile("foo");
476ff2be
SL
221
222 test.cmd(0).must_have("-fPIC");
223 }
224}
225
0731742a
XL
226#[test]
227fn gnu_x86_64_no_plt() {
228 let target = "x86_64-unknown-linux-gnu";
229 let test = Test::gnu();
230 test.gcc()
231 .pic(true)
232 .use_plt(false)
233 .target(&target)
234 .host(&target)
235 .file("foo.c")
236 .compile("foo");
237 test.cmd(0).must_have("-fno-plt");
238}
239
476ff2be
SL
240#[test]
241fn gnu_set_stdlib() {
ba9703b0
XL
242 reset_env();
243
476ff2be
SL
244 let test = Test::gnu();
245 test.gcc()
246 .cpp_set_stdlib(Some("foo"))
8bb4bdeb 247 .file("foo.c")
ea8adc8c 248 .compile("foo");
476ff2be
SL
249
250 test.cmd(0).must_not_have("-stdlib=foo");
251}
252
253#[test]
254fn gnu_include() {
255 let test = Test::gnu();
0531ce1d 256 test.gcc().include("foo/bar").file("foo.c").compile("foo");
476ff2be
SL
257
258 test.cmd(0).must_have("-I").must_have("foo/bar");
259}
260
261#[test]
262fn gnu_define() {
263 let test = Test::gnu();
264 test.gcc()
ea8adc8c 265 .define("FOO", "bar")
476ff2be 266 .define("BAR", None)
8bb4bdeb 267 .file("foo.c")
ea8adc8c 268 .compile("foo");
476ff2be
SL
269
270 test.cmd(0).must_have("-DFOO=bar").must_have("-DBAR");
271}
272
273#[test]
274fn gnu_compile_assembly() {
275 let test = Test::gnu();
0531ce1d 276 test.gcc().file("foo.S").compile("foo");
476ff2be
SL
277 test.cmd(0).must_have("foo.S");
278}
279
041b39d2
XL
280#[test]
281fn gnu_shared() {
ba9703b0
XL
282 reset_env();
283
041b39d2
XL
284 let test = Test::gnu();
285 test.gcc()
286 .file("foo.c")
287 .shared_flag(true)
288 .static_flag(false)
ea8adc8c 289 .compile("foo");
041b39d2 290
0531ce1d 291 test.cmd(0).must_have("-shared").must_not_have("-static");
041b39d2
XL
292}
293
ea8adc8c
XL
294#[test]
295fn gnu_flag_if_supported() {
ba9703b0
XL
296 reset_env();
297
ea8adc8c 298 if cfg!(windows) {
0531ce1d 299 return;
ea8adc8c
XL
300 }
301 let test = Test::gnu();
302 test.gcc()
303 .file("foo.c")
b7449926 304 .flag("-v")
ea8adc8c
XL
305 .flag_if_supported("-Wall")
306 .flag_if_supported("-Wflag-does-not-exist")
307 .flag_if_supported("-std=c++11")
308 .compile("foo");
309
310 test.cmd(0)
b7449926 311 .must_have("-v")
ea8adc8c
XL
312 .must_have("-Wall")
313 .must_not_have("-Wflag-does-not-exist")
314 .must_not_have("-std=c++11");
315}
316
317#[test]
318fn gnu_flag_if_supported_cpp() {
319 if cfg!(windows) {
0531ce1d 320 return;
ea8adc8c
XL
321 }
322 let test = Test::gnu();
323 test.gcc()
324 .cpp(true)
325 .file("foo.cpp")
326 .flag_if_supported("-std=c++11")
327 .compile("foo");
328
0531ce1d 329 test.cmd(0).must_have("-std=c++11");
ea8adc8c
XL
330}
331
041b39d2
XL
332#[test]
333fn gnu_static() {
ba9703b0
XL
334 reset_env();
335
041b39d2
XL
336 let test = Test::gnu();
337 test.gcc()
338 .file("foo.c")
339 .shared_flag(false)
340 .static_flag(true)
ea8adc8c 341 .compile("foo");
041b39d2 342
0531ce1d 343 test.cmd(0).must_have("-static").must_not_have("-shared");
041b39d2
XL
344}
345
487cf647
FG
346#[test]
347fn gnu_no_dash_dash() {
348 let test = Test::gnu();
349 test.gcc().file("foo.c").compile("foo");
350
351 test.cmd(0).must_not_have("--");
352}
353
476ff2be
SL
354#[test]
355fn msvc_smoke() {
ba9703b0
XL
356 reset_env();
357
476ff2be 358 let test = Test::msvc();
0531ce1d 359 test.gcc().file("foo.c").compile("foo");
8bb4bdeb
XL
360
361 test.cmd(0)
60c5eb7d 362 .must_have("-O2")
8bb4bdeb 363 .must_have("foo.c")
60c5eb7d
XL
364 .must_not_have("-Z7")
365 .must_have("-c")
366 .must_have("-MD");
476ff2be
SL
367 test.cmd(1).must_have(test.td.path().join("foo.o"));
368}
369
370#[test]
371fn msvc_opt_level_0() {
ba9703b0
XL
372 reset_env();
373
476ff2be 374 let test = Test::msvc();
0531ce1d 375 test.gcc().opt_level(0).file("foo.c").compile("foo");
476ff2be 376
60c5eb7d 377 test.cmd(0).must_not_have("-O2");
476ff2be
SL
378}
379
380#[test]
381fn msvc_debug() {
382 let test = Test::msvc();
0531ce1d 383 test.gcc().debug(true).file("foo.c").compile("foo");
60c5eb7d 384 test.cmd(0).must_have("-Z7");
476ff2be
SL
385}
386
387#[test]
388fn msvc_include() {
389 let test = Test::msvc();
0531ce1d 390 test.gcc().include("foo/bar").file("foo.c").compile("foo");
476ff2be 391
60c5eb7d 392 test.cmd(0).must_have("-I").must_have("foo/bar");
476ff2be
SL
393}
394
395#[test]
396fn msvc_define() {
397 let test = Test::msvc();
398 test.gcc()
ea8adc8c 399 .define("FOO", "bar")
476ff2be 400 .define("BAR", None)
8bb4bdeb 401 .file("foo.c")
ea8adc8c 402 .compile("foo");
476ff2be 403
60c5eb7d 404 test.cmd(0).must_have("-DFOO=bar").must_have("-DBAR");
476ff2be 405}
7cac9316
XL
406
407#[test]
408fn msvc_static_crt() {
409 let test = Test::msvc();
0531ce1d 410 test.gcc().static_crt(true).file("foo.c").compile("foo");
7cac9316 411
60c5eb7d 412 test.cmd(0).must_have("-MT");
7cac9316
XL
413}
414
415#[test]
416fn msvc_no_static_crt() {
417 let test = Test::msvc();
0531ce1d 418 test.gcc().static_crt(false).file("foo.c").compile("foo");
7cac9316 419
60c5eb7d 420 test.cmd(0).must_have("-MD");
7cac9316 421}
487cf647
FG
422
423#[test]
424fn msvc_no_dash_dash() {
425 let test = Test::msvc();
426 test.gcc().file("foo.c").compile("foo");
427
428 test.cmd(0).must_not_have("--");
429}