use std::any::Any;
-use syntax::symbol::Symbol;
-use rustc::session::Session;
-use rustc::util::common::ErrorReported;
+use rustc::dep_graph::DepGraph;
+use rustc::middle::cstore::{EncodedMetadata, MetadataLoaderDyn};
use rustc::session::config::{OutputFilenames, PrintRequest};
-use rustc::ty::TyCtxt;
+use rustc::session::Session;
use rustc::ty::query::Providers;
-use rustc::middle::cstore::{EncodedMetadata, MetadataLoaderDyn};
-use rustc::dep_graph::DepGraph;
+use rustc::ty::TyCtxt;
+use rustc::util::common::ErrorReported;
+use rustc_span::symbol::Symbol;
pub use rustc_data_structures::sync::MetadataRef;
pub trait CodegenBackend {
fn init(&self, _sess: &Session) {}
fn print(&self, _req: PrintRequest, _sess: &Session) {}
- fn target_features(&self, _sess: &Session) -> Vec<Symbol> { vec![] }
+ fn target_features(&self, _sess: &Session) -> Vec<Symbol> {
+ vec![]
+ }
fn print_passes(&self) {}
fn print_version(&self) {}
/// # Panics
///
/// Panics when the passed `Box<dyn Any>` was not returned by `codegen_backend`.
- fn join_codegen_and_link(
+ fn join_codegen(
&self,
ongoing_codegen: Box<dyn Any>,
sess: &Session,
dep_graph: &DepGraph,
+ ) -> Result<Box<dyn Any>, ErrorReported>;
+
+ /// This is called on the returned `Box<dyn Any>` from `join_codegen`
+ ///
+ /// # Panics
+ ///
+ /// Panics when the passed `Box<dyn Any>` was not returned by `join_codegen`.
+ fn link(
+ &self,
+ sess: &Session,
+ codegen_results: Box<dyn Any>,
outputs: &OutputFilenames,
) -> Result<(), ErrorReported>;
}