Fix test
This commit is contained in:
parent
50f67de35e
commit
fff2f6ab94
1 changed files with 34 additions and 7 deletions
|
@ -3,9 +3,13 @@
|
|||
extern crate syntax;
|
||||
extern crate rustc;
|
||||
extern crate rustc_codegen_utils;
|
||||
#[macro_use]
|
||||
extern crate rustc_data_structures;
|
||||
extern crate rustc_target;
|
||||
|
||||
use std::any::Any;
|
||||
use std::sync::mpsc;
|
||||
use std::sync::{Arc, mpsc};
|
||||
use std::path::Path;
|
||||
use syntax::symbol::Symbol;
|
||||
use rustc::session::Session;
|
||||
use rustc::session::config::OutputFilenames;
|
||||
|
@ -14,21 +18,44 @@ use rustc::ty::query::Providers;
|
|||
use rustc::middle::cstore::MetadataLoader;
|
||||
use rustc::dep_graph::DepGraph;
|
||||
use rustc::util::common::ErrorReported;
|
||||
use rustc_codegen_utils::codegen_backend::{CodegenBackend, MetadataOnlyCodegenBackend};
|
||||
use rustc_codegen_utils::codegen_backend::CodegenBackend;
|
||||
use rustc_data_structures::sync::MetadataRef;
|
||||
use rustc_data_structures::owning_ref::OwningRef;
|
||||
use rustc_target::spec::Target;
|
||||
|
||||
struct TheBackend(Box<CodegenBackend>);
|
||||
pub struct NoLlvmMetadataLoader;
|
||||
|
||||
impl MetadataLoader for NoLlvmMetadataLoader {
|
||||
fn get_rlib_metadata(&self, _: &Target, filename: &Path) -> Result<MetadataRef, String> {
|
||||
let buf = std::fs::read(filename).map_err(|e| format!("metadata file open err: {:?}", e))?;
|
||||
let buf: OwningRef<Vec<u8>, [u8]> = OwningRef::new(buf);
|
||||
Ok(rustc_erase_owner!(buf.map_owner_box()))
|
||||
}
|
||||
|
||||
fn get_dylib_metadata(&self, target: &Target, filename: &Path) -> Result<MetadataRef, String> {
|
||||
self.get_rlib_metadata(target, filename)
|
||||
}
|
||||
}
|
||||
|
||||
struct TheBackend;
|
||||
|
||||
impl CodegenBackend for TheBackend {
|
||||
fn metadata_loader(&self) -> Box<MetadataLoader + Sync> {
|
||||
self.0.metadata_loader()
|
||||
Box::new(NoLlvmMetadataLoader)
|
||||
}
|
||||
|
||||
fn provide(&self, providers: &mut Providers) {
|
||||
self.0.provide(providers);
|
||||
rustc_codegen_utils::symbol_names::provide(providers);
|
||||
|
||||
providers.target_features_whitelist = |_tcx, _cnum| {
|
||||
Default::default() // Just a dummy
|
||||
};
|
||||
providers.is_reachable_non_generic = |_tcx, _defid| true;
|
||||
providers.exported_symbols = |_tcx, _crate| Arc::new(Vec::new());
|
||||
}
|
||||
|
||||
fn provide_extern(&self, providers: &mut Providers) {
|
||||
self.0.provide_extern(providers);
|
||||
providers.is_reachable_non_generic = |_tcx, _defid| true;
|
||||
}
|
||||
|
||||
fn codegen_crate<'a, 'tcx>(
|
||||
|
@ -69,5 +96,5 @@ impl CodegenBackend for TheBackend {
|
|||
/// This is the entrypoint for a hot plugged rustc_codegen_llvm
|
||||
#[no_mangle]
|
||||
pub fn __rustc_codegen_backend() -> Box<CodegenBackend> {
|
||||
Box::new(TheBackend(MetadataOnlyCodegenBackend::boxed()))
|
||||
Box::new(TheBackend)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue