about summary refs log tree commit diff
diff options
context:
space:
mode:
m---------src/tools/cargo0
-rw-r--r--src/tools/tidy/src/allowed_run_make_makefiles.txt4
-rw-r--r--tests/run-make/sanitizer-cdylib-link/Makefile16
-rw-r--r--tests/run-make/sanitizer-cdylib-link/rmake.rs17
-rw-r--r--tests/run-make/sanitizer-dylib-link/Makefile16
-rw-r--r--tests/run-make/sanitizer-dylib-link/rmake.rs16
-rw-r--r--tests/run-make/sanitizer-staticlib-link/Makefile20
-rw-r--r--tests/run-make/sanitizer-staticlib-link/rmake.rs26
-rw-r--r--tests/run-make/static-dylib-by-default/Makefile17
-rw-r--r--tests/run-make/static-dylib-by-default/rmake.rs35
10 files changed, 94 insertions, 73 deletions
diff --git a/src/tools/cargo b/src/tools/cargo
-Subproject 5f6b9a92201d78af75dc24f14662c3e2dacbbbe
+Subproject b5d44db1daf0469b227a6211b987162a39a5473
diff --git a/src/tools/tidy/src/allowed_run_make_makefiles.txt b/src/tools/tidy/src/allowed_run_make_makefiles.txt
index c3993e41a50..7284feadf9c 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -50,14 +50,10 @@ 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-cdylib-link/Makefile
-run-make/sanitizer-dylib-link/Makefile
-run-make/sanitizer-staticlib-link/Makefile
 run-make/share-generics-dylib/Makefile
 run-make/simd-ffi/Makefile
 run-make/split-debuginfo/Makefile
 run-make/stable-symbol-names/Makefile
-run-make/static-dylib-by-default/Makefile
 run-make/staticlib-dylib-linkage/Makefile
 run-make/symbol-mangling-hashed/Makefile
 run-make/symbol-visibility/Makefile
diff --git a/tests/run-make/sanitizer-cdylib-link/Makefile b/tests/run-make/sanitizer-cdylib-link/Makefile
deleted file mode 100644
index 10d94afc39e..00000000000
--- a/tests/run-make/sanitizer-cdylib-link/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-# needs-sanitizer-support
-# needs-sanitizer-address
-
-include ../tools.mk
-
-LOG := $(TMPDIR)/log.txt
-
-# This test builds a shared object, then an executable that links it as a native
-# rust library (contrast to an rlib). The shared library and executable both
-# are compiled with address sanitizer, and we assert that a fault in the cdylib
-# is correctly detected.
-
-all:
-	$(RUSTC) -g -Z sanitizer=address --crate-type cdylib --target $(TARGET) library.rs
-	$(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) program.rs
-	LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow
diff --git a/tests/run-make/sanitizer-cdylib-link/rmake.rs b/tests/run-make/sanitizer-cdylib-link/rmake.rs
new file mode 100644
index 00000000000..f9d7fd98789
--- /dev/null
+++ b/tests/run-make/sanitizer-cdylib-link/rmake.rs
@@ -0,0 +1,17 @@
+// Identical to sanitizer-dylib-link, but with a cdylib.
+// This test builds a shared object, then an executable that links it as a native
+// rust library (contrast to an rlib). The shared library and executable both
+// are compiled with address sanitizer, and we assert that a fault in the cdylib
+// is correctly detected.
+// See https://github.com/rust-lang/rust/pull/38699
+
+//@ needs-sanitizer-support
+//@ needs-sanitizer-address
+
+use run_make_support::{run_fail, rustc};
+
+fn main() {
+    rustc().arg("-g").arg("-Zsanitizer=address").crate_type("cdylib").input("library.rs").run();
+    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/sanitizer-dylib-link/Makefile b/tests/run-make/sanitizer-dylib-link/Makefile
deleted file mode 100644
index c5a698db3a0..00000000000
--- a/tests/run-make/sanitizer-dylib-link/Makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-# needs-sanitizer-support
-# needs-sanitizer-address
-
-include ../tools.mk
-
-LOG := $(TMPDIR)/log.txt
-
-# This test builds a shared object, then an executable that links it as a native
-# rust library (contrast to an rlib). The shared library and executable both
-# are compiled with address sanitizer, and we assert that a fault in the dylib
-# is correctly detected.
-
-all:
-	$(RUSTC) -g -Z sanitizer=address --crate-type dylib --target $(TARGET) library.rs
-	$(RUSTC) -g -Z sanitizer=address --crate-type bin --target $(TARGET) program.rs
-	LD_LIBRARY_PATH=$(TMPDIR) $(TMPDIR)/program 2>&1 | $(CGREP) stack-buffer-overflow
diff --git a/tests/run-make/sanitizer-dylib-link/rmake.rs b/tests/run-make/sanitizer-dylib-link/rmake.rs
new file mode 100644
index 00000000000..b43420adc72
--- /dev/null
+++ b/tests/run-make/sanitizer-dylib-link/rmake.rs
@@ -0,0 +1,16 @@
+// This test builds a shared object, then an executable that links it as a native
+// rust library (contrast to an rlib). The shared library and executable both
+// are compiled with address sanitizer, and we assert that a fault in the dylib
+// is correctly detected.
+// See https://github.com/rust-lang/rust/pull/38699
+
+//@ needs-sanitizer-support
+//@ needs-sanitizer-address
+
+use run_make_support::{run_fail, rustc};
+
+fn main() {
+    rustc().arg("-g").arg("-Zsanitizer=address").crate_type("dylib").input("library.rs").run();
+    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/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/Makefile b/tests/run-make/static-dylib-by-default/Makefile
deleted file mode 100644
index cdaab42d06c..00000000000
--- a/tests/run-make/static-dylib-by-default/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-# ignore-cross-compile
-include ../tools.mk
-
-TO_LINK := $(call DYLIB,bar)
-ifdef IS_MSVC
-LINK_ARG = $(TO_LINK:dll=dll.lib)
-else
-LINK_ARG = $(TO_LINK)
-endif
-
-all:
-	$(RUSTC) foo.rs
-	$(RUSTC) bar.rs
-	$(CC) main.c $(call OUT_EXE,main) $(LINK_ARG) $(EXTRACFLAGS)
-	rm $(TMPDIR)/*.rlib
-	rm $(call DYLIB,foo)
-	$(call RUN,main)
diff --git a/tests/run-make/static-dylib-by-default/rmake.rs b/tests/run-make/static-dylib-by-default/rmake.rs
new file mode 100644
index 00000000000..133210c74e7
--- /dev/null
+++ b/tests/run-make/static-dylib-by-default/rmake.rs
@@ -0,0 +1,35 @@
+// If a dylib is being produced, the compiler will first check to see if it can
+// be created entirely statically before falling back to dynamic dependencies. This
+// behavior can be overridden with `-C prefer-dynamic`.
+// In this test, bar depends on foo and is compiled fully statically despite the available
+// `foo` dynamic library. This allows the main binary to be executed in the final step.
+// See https://github.com/rust-lang/rust/commit/3036b001276a6e43409b08b7f2334ce72aeeb036
+
+//@ ignore-cross-compile
+// Reason: the compiled binary is executed
+
+use run_make_support::{
+    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();
+    // 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");
+}