|
| 1 | +// Make sure that for `aarch64-unknown-linux-pauthtest` compiler emits warning when static |
| 2 | +// libraries are linked. Test both foreign module linked from #[link] directive and command line |
| 3 | +// invocations. |
| 4 | + |
| 5 | +//@ only-aarch64-unknown-linux-pauthtest |
| 6 | +// ignore-tidy-linelength |
| 7 | + |
| 8 | +use run_make_support::{cc, env_var, regex, run, rustc}; |
| 9 | + |
| 10 | +fn main() { |
| 11 | + let input = "helper"; |
| 12 | + let input_name = format!("{input}.c"); |
| 13 | + let lib_name = format!("{}{input}.{}", "lib", "a"); |
| 14 | + // Build a static library |
| 15 | + cc().out_exe(&lib_name) |
| 16 | + .input(&input_name) |
| 17 | + .args(&["-target", "aarch64-unknown-linux-pauthtest", "-march=armv8.3-a+pauth", "-c"]) |
| 18 | + .run(); |
| 19 | + |
| 20 | + // Check against foreign module warning: #[link(name = "helper", kind = "static")] |
| 21 | + let stderr_foreign_module = rustc() |
| 22 | + .target("aarch64-unknown-linux-pauthtest") |
| 23 | + .input("main.rs") |
| 24 | + .linker(&env_var("CC")) |
| 25 | + .link_args(&env_var("CC_DEFAULT_FLAGS")) |
| 26 | + .arg("-L.") |
| 27 | + .run() |
| 28 | + .stderr_utf8(); |
| 29 | + run("main"); |
| 30 | + let re_foreign_moule = regex::Regex::new( r"(?s)warning: library `helper`.*linked statically.*aarch64-unknown-linux-pauthtest.*requires dynamic linking.*using dynamic linking instead").unwrap(); |
| 31 | + assert!(re_foreign_moule.is_match(&stderr_foreign_module)); |
| 32 | + |
| 33 | + // Check against command line warning: -lstatic=helper |
| 34 | + let stderr_command_line = rustc() |
| 35 | + .target("aarch64-unknown-linux-pauthtest") |
| 36 | + .input("main_cmd_line.rs") |
| 37 | + .linker(&env_var("CC")) |
| 38 | + .link_args(&env_var("CC_DEFAULT_FLAGS")) |
| 39 | + .arg("-L.") |
| 40 | + .arg("-lstatic=helper") |
| 41 | + .run() |
| 42 | + .stderr_utf8(); |
| 43 | + run("main_cmd_line"); |
| 44 | + let re_cmd_line = regex::Regex::new( r"(?s)warning: static linking of `helper`.*is not supported on.*aarch64-unknown-linux-pauthtest.*using dynamic linking instead").unwrap(); |
| 45 | + assert!(re_cmd_line.is_match(&stderr_command_line)); |
| 46 | +} |
0 commit comments