27 lines
1.1 KiB
Rust
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");
|
|
}
|