2024-07-04 12:16:11 -05:00
|
|
|
// Setting the linker flavor as a C compiler should cause the output of the -l flags to be
|
|
|
|
// prefixed by -Wl, except when a flag is requested to be verbatim. A bare linker (ld) should
|
|
|
|
// never cause prefixes to appear in the output. This test checks this ruleset twice, once with
|
|
|
|
// explicit flags and then with those flags passed inside the rust source code.
|
|
|
|
// See https://github.com/rust-lang/rust/pull/118202
|
|
|
|
|
2024-07-04 12:46:26 -05:00
|
|
|
//@ only-linux
|
|
|
|
// Reason: the `gnu-cc` linker is only available on linux
|
2024-07-04 12:16:11 -05:00
|
|
|
|
|
|
|
use run_make_support::{regex, rustc};
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let out_gnu = rustc()
|
|
|
|
.input("empty.rs")
|
|
|
|
.linker_flavor("gnu-cc")
|
|
|
|
.arg("-Zunstable-options")
|
|
|
|
.arg("-lstatic=l1")
|
|
|
|
.arg("-llink-arg=a1")
|
|
|
|
.arg("-lstatic=l2")
|
|
|
|
.arg("-llink-arg=a2")
|
|
|
|
.arg("-ldylib=d1")
|
|
|
|
.arg("-llink-arg=a3")
|
|
|
|
.print("link-args")
|
|
|
|
.run_unchecked()
|
|
|
|
.stdout_utf8();
|
|
|
|
let out_gnu_verbatim = rustc()
|
|
|
|
.input("empty.rs")
|
|
|
|
.linker_flavor("gnu-cc")
|
|
|
|
.arg("-Zunstable-options")
|
|
|
|
.arg("-lstatic=l1")
|
|
|
|
.arg("-llink-arg:+verbatim=a1")
|
|
|
|
.arg("-lstatic=l2")
|
|
|
|
.arg("-llink-arg=a2")
|
|
|
|
.arg("-ldylib=d1")
|
|
|
|
.arg("-llink-arg=a3")
|
|
|
|
.print("link-args")
|
|
|
|
.run_unchecked()
|
|
|
|
.stdout_utf8();
|
|
|
|
let out_ld = rustc()
|
|
|
|
.input("empty.rs")
|
|
|
|
.linker_flavor("ld")
|
|
|
|
.arg("-Zunstable-options")
|
|
|
|
.arg("-lstatic=l1")
|
|
|
|
.arg("-llink-arg=a1")
|
|
|
|
.arg("-lstatic=l2")
|
|
|
|
.arg("-llink-arg=a2")
|
|
|
|
.arg("-ldylib=d1")
|
|
|
|
.arg("-llink-arg=a3")
|
|
|
|
.print("link-args")
|
|
|
|
.run_unchecked()
|
|
|
|
.stdout_utf8();
|
|
|
|
let out_att_gnu = rustc()
|
|
|
|
.arg("-Zunstable-options")
|
|
|
|
.linker_flavor("gnu-cc")
|
|
|
|
.input("attribute.rs")
|
|
|
|
.print("link-args")
|
|
|
|
.run_unchecked()
|
|
|
|
.stdout_utf8();
|
|
|
|
let out_att_gnu_verbatim = rustc()
|
|
|
|
.cfg(r#"feature="verbatim""#)
|
|
|
|
.arg("-Zunstable-options")
|
|
|
|
.linker_flavor("gnu-cc")
|
|
|
|
.input("attribute.rs")
|
|
|
|
.print("link-args")
|
|
|
|
.run_unchecked()
|
|
|
|
.stdout_utf8();
|
|
|
|
let out_att_ld = rustc()
|
|
|
|
.linker_flavor("ld")
|
|
|
|
.input("attribute.rs")
|
|
|
|
.print("link-args")
|
|
|
|
.run_unchecked()
|
|
|
|
.stdout_utf8();
|
|
|
|
|
|
|
|
let no_verbatim = regex::Regex::new("l1.*-Wl,a1.*l2.*-Wl,a2.*d1.*-Wl,a3").unwrap();
|
|
|
|
let one_verbatim = regex::Regex::new(r#"l1.*"a1".*l2.*-Wl,a2.*d1.*-Wl,a3"#).unwrap();
|
|
|
|
let ld = regex::Regex::new(r#"l1.*"a1".*l2.*"a2".*d1.*"a3""#).unwrap();
|
|
|
|
|
|
|
|
assert!(no_verbatim.is_match(&out_gnu));
|
|
|
|
assert!(no_verbatim.is_match(&out_att_gnu));
|
|
|
|
assert!(one_verbatim.is_match(&out_gnu_verbatim));
|
|
|
|
assert!(one_verbatim.is_match(&out_att_gnu_verbatim));
|
|
|
|
assert!(ld.is_match(&out_ld));
|
|
|
|
assert!(ld.is_match(&out_att_ld));
|
|
|
|
}
|