summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-04-06 00:14:44 +0200
committerGitHub <noreply@github.com>2019-04-06 00:14:44 +0200
commitf3f68987197c384f44ea6bb96dc88caa4ade193a (patch)
tree9e0044a40883b21a9f39fc6e3700982ee6aa7836 /src
parent6c7ec18e3357e71c7c26f43b28b52e78634a917c (diff)
parenta6e802ab4c84fb50b484fb12bbf397b889c70f77 (diff)
downloadrust-f3f68987197c384f44ea6bb96dc88caa4ade193a.tar.gz
rust-f3f68987197c384f44ea6bb96dc88caa4ade193a.zip
Rollup merge of #59696 - michaelwoerister:fix-issue-59137, r=alexcrichton
Remove invalid assertion back::link::from add_upstream_rust_crates().

This removes a misplaced assertion. The function containing the assertion is actually only ever called for upstream crates that are not considered for LTO, so we don't care whether upstream code has been merged in by LTO or not.

Fixes #59137

r? @alexcrichton
Diffstat (limited to 'src')
-rw-r--r--src/librustc_codegen_llvm/back/link.rs4
-rw-r--r--src/test/run-make-fulldeps/lto-dylib-dep/Makefile10
-rw-r--r--src/test/run-make-fulldeps/lto-dylib-dep/a_dylib.rs4
-rw-r--r--src/test/run-make-fulldeps/lto-dylib-dep/main.rs6
4 files changed, 20 insertions, 4 deletions
diff --git a/src/librustc_codegen_llvm/back/link.rs b/src/librustc_codegen_llvm/back/link.rs
index f10bc0516e5..19419a72b94 100644
--- a/src/librustc_codegen_llvm/back/link.rs
+++ b/src/librustc_codegen_llvm/back/link.rs
@@ -1396,10 +1396,6 @@ fn add_upstream_rust_crates(cmd: &mut dyn Linker,
 
     // Same thing as above, but for dynamic crates instead of static crates.
     fn add_dynamic_crate(cmd: &mut dyn Linker, sess: &Session, cratepath: &Path) {
-        // If we're performing LTO, then it should have been previously required
-        // that all upstream rust dependencies were available in an rlib format.
-        assert!(!are_upstream_rust_objects_already_included(sess));
-
         // Just need to tell the linker about where the library lives and
         // what its name is
         let parent = cratepath.parent();
diff --git a/src/test/run-make-fulldeps/lto-dylib-dep/Makefile b/src/test/run-make-fulldeps/lto-dylib-dep/Makefile
new file mode 100644
index 00000000000..ab8ee6c2ef7
--- /dev/null
+++ b/src/test/run-make-fulldeps/lto-dylib-dep/Makefile
@@ -0,0 +1,10 @@
+-include ../tools.mk
+
+# Test that we don't run into an assertion when using a Rust dylib dependency
+# while compiling with full LTO.
+# See https://github.com/rust-lang/rust/issues/59137
+
+all:
+	$(RUSTC) a_dylib.rs --crate-type=dylib -C prefer-dynamic
+	$(RUSTC) main.rs -C lto
+	$(call RUN,main)
diff --git a/src/test/run-make-fulldeps/lto-dylib-dep/a_dylib.rs b/src/test/run-make-fulldeps/lto-dylib-dep/a_dylib.rs
new file mode 100644
index 00000000000..c5a35296f89
--- /dev/null
+++ b/src/test/run-make-fulldeps/lto-dylib-dep/a_dylib.rs
@@ -0,0 +1,4 @@
+
+pub fn foo() {
+    println!("bar");
+}
diff --git a/src/test/run-make-fulldeps/lto-dylib-dep/main.rs b/src/test/run-make-fulldeps/lto-dylib-dep/main.rs
new file mode 100644
index 00000000000..af0955e7f35
--- /dev/null
+++ b/src/test/run-make-fulldeps/lto-dylib-dep/main.rs
@@ -0,0 +1,6 @@
+
+extern crate a_dylib;
+
+fn main() {
+    a_dylib::foo();
+}