rust/tests/run-make/sanitizer-staticlib-link/rmake.rs

27 lines
1.1 KiB
Rust

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