diff --git a/src/tools/tidy/src/allowed_run_make_makefiles.txt b/src/tools/tidy/src/allowed_run_make_makefiles.txt index b46fe419269..abe2060fbea 100644 --- a/src/tools/tidy/src/allowed_run_make_makefiles.txt +++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt @@ -70,7 +70,6 @@ run-make/reproducible-build-2/Makefile run-make/reproducible-build/Makefile run-make/rlib-format-packed-bundled-libs-2/Makefile run-make/rlib-format-packed-bundled-libs/Makefile -run-make/sanitizer-staticlib-link/Makefile run-make/share-generics-dylib/Makefile run-make/simd-ffi/Makefile run-make/split-debuginfo/Makefile diff --git a/tests/run-make/sanitizer-staticlib-link/Makefile b/tests/run-make/sanitizer-staticlib-link/Makefile deleted file mode 100644 index 7b1a286ed12..00000000000 --- a/tests/run-make/sanitizer-staticlib-link/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# needs-sanitizer-support -# needs-sanitizer-address - -include ../tools.mk - -# 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 - -all: - $(RUSTC) -g -Z sanitizer=address --crate-type staticlib --target $(TARGET) library.rs - ! $(CC) program.c $(call STATICLIB,library) $(call OUT_EXE,program) $(EXTRACFLAGS) $(EXTRACXXFLAGS) - $(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) -L . program.rs - LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow - diff --git a/tests/run-make/sanitizer-staticlib-link/rmake.rs b/tests/run-make/sanitizer-staticlib-link/rmake.rs new file mode 100644 index 00000000000..e38d15a8a3c --- /dev/null +++ b/tests/run-make/sanitizer-staticlib-link/rmake.rs @@ -0,0 +1,26 @@ +// 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"); +} diff --git a/tests/run-make/static-dylib-by-default/rmake.rs b/tests/run-make/static-dylib-by-default/rmake.rs index 70f3815bdef..133210c74e7 100644 --- a/tests/run-make/static-dylib-by-default/rmake.rs +++ b/tests/run-make/static-dylib-by-default/rmake.rs @@ -7,19 +7,29 @@ //@ ignore-cross-compile // Reason: the compiled binary is executed -//FIXME(Oneirical): try on msvc, not because of an ignore but because i did wonky things use run_make_support::{ - cc, cwd, dynamic_lib_name, extra_c_flags, has_extension, rfs, run, rustc, shallow_find_files, + cc, cwd, dynamic_lib_name, extra_c_flags, has_extension, is_msvc, rfs, run, rustc, + shallow_find_files, }; fn main() { rustc().input("foo.rs").run(); rustc().input("bar.rs").run(); - cc().input("main.c").out_exe("main").arg(dynamic_lib_name("bar")).args(extra_c_flags()).run(); + // On msvc, dynamic libraries are compiled by rustc to: + // bar.dll // dylib + // bar.dll.lib // import library for the dylib + // bar.dll.exp // export library for the dylib + // msvc's underlying link.exe requires the import library for the dynamic library as input. + // That is why the library is bar.dll.lib, not bar.dll. + let library = if is_msvc() { "bar.dll.lib" } else { &dynamic_lib_name("bar") }; + cc().input("main.c").out_exe("main").arg(library).args(extra_c_flags()).run(); for rlib in shallow_find_files(cwd(), |path| has_extension(path, "rlib")) { rfs::remove_file(rlib); } rfs::remove_file(dynamic_lib_name("foo")); + if is_msvc() { + rfs::remove_file("foo.dll.lib"); + } run("main"); }