]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_codegen_llvm/lib.rs
Auto merge of #69144 - Dylan-DPC:rollup-apt6zjj, r=Dylan-DPC
[rust.git] / src / librustc_codegen_llvm / lib.rs
index 60771d385aea5187d098415cafe491ef9ea33cdc..b1085ba1703301628340d2fab55127ff5e32cab4 100644 (file)
@@ -6,18 +6,11 @@
 
 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
 #![feature(bool_to_option)]
-#![feature(box_patterns)]
-#![feature(box_syntax)]
 #![feature(const_cstr_unchecked)]
 #![feature(crate_visibility_modifier)]
 #![feature(extern_types)]
 #![feature(in_band_lifetimes)]
-#![feature(libc)]
 #![feature(nll)]
-#![feature(optin_builtin_traits)]
-#![feature(concat_idents)]
-#![feature(link_args)]
-#![feature(static_nobundle)]
 #![feature(trusted_len)]
 #![recursion_limit = "256"]
 
@@ -29,7 +22,7 @@
 use rustc_codegen_ssa::back::lto::{LtoModuleCodegen, SerializedModule, ThinModule};
 use rustc_codegen_ssa::back::write::{CodegenContext, FatLTOInput, ModuleConfig};
 use rustc_codegen_ssa::traits::*;
-use rustc_codegen_ssa::CompiledModule;
+use rustc_codegen_ssa::{CodegenResults, CompiledModule};
 use rustc_errors::{FatalError, Handler};
 use std::any::Any;
 use std::ffi::CStr;
@@ -39,7 +32,7 @@
 
 use rustc::dep_graph::DepGraph;
 use rustc::middle::cstore::{EncodedMetadata, MetadataLoaderDyn};
-use rustc::session::config::{OptLevel, OutputFilenames, OutputType, PrintRequest};
+use rustc::session::config::{self, OptLevel, OutputFilenames, PrintRequest};
 use rustc::session::Session;
 use rustc::ty::{self, TyCtxt};
 use rustc::util::common::ErrorReported;
@@ -51,6 +44,7 @@ mod back {
     pub mod archive;
     pub mod bytecode;
     pub mod lto;
+    mod profiling;
     pub mod write;
 }
 
@@ -196,7 +190,7 @@ unsafe impl Sync for LlvmCodegenBackend {}
 
 impl LlvmCodegenBackend {
     pub fn new() -> Box<dyn CodegenBackend> {
-        box LlvmCodegenBackend(())
+        Box::new(LlvmCodegenBackend(()))
     }
 }
 
@@ -245,7 +239,7 @@ fn target_features(&self, sess: &Session) -> Vec<Symbol> {
     }
 
     fn metadata_loader(&self) -> Box<MetadataLoaderDyn> {
-        box metadata::LlvmMetadataLoader
+        Box::new(metadata::LlvmMetadataLoader)
     }
 
     fn provide(&self, providers: &mut ty::query::Providers<'_>) {
@@ -262,21 +256,20 @@ fn codegen_crate<'tcx>(
         metadata: EncodedMetadata,
         need_metadata_module: bool,
     ) -> Box<dyn Any> {
-        box rustc_codegen_ssa::base::codegen_crate(
+        Box::new(rustc_codegen_ssa::base::codegen_crate(
             LlvmCodegenBackend(()),
             tcx,
             metadata,
             need_metadata_module,
-        )
+        ))
     }
 
-    fn join_codegen_and_link(
+    fn join_codegen(
         &self,
         ongoing_codegen: Box<dyn Any>,
         sess: &Session,
         dep_graph: &DepGraph,
-        outputs: &OutputFilenames,
-    ) -> Result<(), ErrorReported> {
+    ) -> Result<Box<dyn Any>, ErrorReported> {
         let (codegen_results, work_products) = ongoing_codegen
             .downcast::<rustc_codegen_ssa::back::write::OngoingCodegen<LlvmCodegenBackend>>()
             .expect("Expected LlvmCodegenBackend's OngoingCodegen, found Box<Any>")
@@ -291,21 +284,25 @@ fn join_codegen_and_link(
 
         sess.compile_status()?;
 
-        if !sess
-            .opts
-            .output_types
-            .keys()
-            .any(|&i| i == OutputType::Exe || i == OutputType::Metadata)
-        {
-            return Ok(());
-        }
+        Ok(Box::new(codegen_results))
+    }
+
+    fn link(
+        &self,
+        sess: &Session,
+        codegen_results: Box<dyn Any>,
+        outputs: &OutputFilenames,
+    ) -> Result<(), ErrorReported> {
+        let codegen_results = codegen_results
+            .downcast::<CodegenResults>()
+            .expect("Expected CodegenResults, found Box<Any>");
 
         if sess.opts.debugging_opts.no_link {
             // FIXME: use a binary format to encode the `.rlink` file
             let rlink_data = json::encode(&codegen_results).map_err(|err| {
                 sess.fatal(&format!("failed to encode rlink: {}", err));
             })?;
-            let rlink_file = outputs.with_extension("rlink");
+            let rlink_file = outputs.with_extension(config::RLINK_EXT);
             fs::write(&rlink_file, rlink_data).map_err(|err| {
                 sess.fatal(&format!("failed to write file {}: {}", rlink_file.display(), err));
             })?;