| // This test first builds a staticlib with AddressSanitizer and checks that |
| // linking it to an executable fails due to the missing sanitizer runtime. |
| // It then builds an executable linking to the staticlib and checks that |
| // the fault in the staticlib is detected correctly. |
| |
| // Note that checking for the link failure actually checks two things at once: |
| // 1) That the library has the sanitizer intrumentation |
| // 2) and that library does not have the sanitizer runtime |
| // See https://github.com/rust-lang/rust/pull/38699 |
| |
| //@ needs-sanitizer-support |
| //@ needs-sanitizer-address |
| |
| use run_make_support::{cc, extra_c_flags, extra_cxx_flags, run_fail, rustc, static_lib_name}; |
| |
| fn main() { |
| rustc().arg("-g").arg("-Zsanitizer=address").crate_type("staticlib").input("library.rs").run(); |
| cc().input("program.c") |
| .arg(static_lib_name("library")) |
| .out_exe("program") |
| .args(extra_c_flags()) |
| .args(extra_cxx_flags()) |
| .run_fail(); |
| rustc().arg("-g").arg("-Zsanitizer=address").crate_type("bin").input("program.rs").run(); |
| run_fail("program").assert_stderr_contains("stack-buffer-overflow"); |
| } |