about summary refs log tree commit diff
path: root/src/librustc_interface
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-02-04 05:48:54 +0000
committerbors <bors@rust-lang.org>2020-02-04 05:48:54 +0000
commitfc07615c49259b16e1d1789e23050e71b744c652 (patch)
treeb0ce92ca0e2ec863a00a23c6624094a8cdd27de9 /src/librustc_interface
parent42a0bd2091b9ca8fe5059fd5f4a26279a388f278 (diff)
parentae51d2ba32a3dfa3811ee19164ef789eb734a38b (diff)
Auto merge of #68601 - 0dvictor:split, r=tmandry
Split `join_codegen_and_link()` into two steps

`join_codegen_and_link()` is split to `join_codegen()` and `link()`.
Diffstat (limited to 'src/librustc_interface')
-rw-r--r--src/librustc_interface/queries.rs23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/librustc_interface/queries.rs b/src/librustc_interface/queries.rs
index 0af9b17a299..2ac2845be91 100644
--- a/src/librustc_interface/queries.rs
+++ b/src/librustc_interface/queries.rs
@@ -310,19 +310,22 @@ pub struct Linker {
 
 impl Linker {
     pub fn link(self) -> Result<()> {
-        let r = self
-            .codegen_backend
-            .join_codegen_and_link(
-                self.ongoing_codegen,
-                &self.sess,
-                &self.dep_graph,
-                &self.prepare_outputs,
-            )
-            .map_err(|_| ErrorReported);
+        let codegen_results =
+            self.codegen_backend.join_codegen(self.ongoing_codegen, &self.sess, &self.dep_graph)?;
         let prof = self.sess.prof.clone();
         let dep_graph = self.dep_graph;
         prof.generic_activity("drop_dep_graph").run(move || drop(dep_graph));
-        r
+
+        if !self
+            .sess
+            .opts
+            .output_types
+            .keys()
+            .any(|&i| i == OutputType::Exe || i == OutputType::Metadata)
+        {
+            return Ok(());
+        }
+        self.codegen_backend.link(&self.sess, codegen_results, &self.prepare_outputs)
     }
 }