// 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"); }