diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2019-03-02 13:46:10 +0100 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2019-03-16 10:54:38 +0100 |
| commit | fff2f6ab946fe360cdf893560388616268e093f3 (patch) | |
| tree | a11491ff570efd3aee2d7b2445eb8e01136965dd | |
| parent | 50f67de35ed0aadc351e55dad47d49bc7c89c399 (diff) | |
| download | rust-fff2f6ab946fe360cdf893560388616268e093f3.tar.gz rust-fff2f6ab946fe360cdf893560388616268e093f3.zip | |
Fix test
| -rw-r--r-- | src/test/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/src/test/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs b/src/test/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs index 641ff18d37e..5330470da16 100644 --- a/src/test/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs +++ b/src/test/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs @@ -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) } |
