about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2019-03-02 13:46:10 +0100
committerbjorn3 <bjorn3@users.noreply.github.com>2019-03-16 10:54:38 +0100
commitfff2f6ab946fe360cdf893560388616268e093f3 (patch)
treea11491ff570efd3aee2d7b2445eb8e01136965dd
parent50f67de35ed0aadc351e55dad47d49bc7c89c399 (diff)
downloadrust-fff2f6ab946fe360cdf893560388616268e093f3.tar.gz
rust-fff2f6ab946fe360cdf893560388616268e093f3.zip
Fix test
-rw-r--r--src/test/run-make-fulldeps/hotplug_codegen_backend/the_backend.rs41
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)
 }