diff options
| author | bjorn3 <bjorn3@users.noreply.github.com> | 2020-10-15 16:15:04 +0200 |
|---|---|---|
| committer | bjorn3 <bjorn3@users.noreply.github.com> | 2020-10-15 16:15:04 +0200 |
| commit | 7045b101cc9a69b012758bf72ecd4f2622f4cdbe (patch) | |
| tree | 1cb0ddf74eeca94f6b5472f366c1e06e76dcb620 | |
| parent | 1c408407385b791c9c643e018ade22535e1203cb (diff) | |
| download | rust-7045b101cc9a69b012758bf72ecd4f2622f4cdbe.tar.gz rust-7045b101cc9a69b012758bf72ecd4f2622f4cdbe.zip | |
Use MetadataRef in the metadata loader to fix parallel rustc
| -rw-r--r-- | src/metadata.rs | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/src/metadata.rs b/src/metadata.rs index 93cff5711d9..7ba6ec6d750 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -5,8 +5,9 @@ use std::fs::File; use std::path::Path; use rustc_codegen_ssa::METADATA_FILENAME; -use rustc_data_structures::owning_ref::{self, OwningRef}; +use rustc_data_structures::owning_ref::OwningRef; use rustc_data_structures::rustc_erase_owner; +use rustc_data_structures::sync::MetadataRef; use rustc_middle::middle::cstore::{EncodedMetadata, MetadataLoader}; use rustc_middle::ty::TyCtxt; use rustc_session::config; @@ -17,11 +18,7 @@ use crate::backend::WriteMetadata; pub(crate) struct CraneliftMetadataLoader; impl MetadataLoader for CraneliftMetadataLoader { - fn get_rlib_metadata( - &self, - _target: &Target, - path: &Path, - ) -> Result<owning_ref::ErasedBoxRef<[u8]>, String> { + fn get_rlib_metadata(&self, _target: &Target, path: &Path) -> Result<MetadataRef, String> { let mut archive = ar::Archive::new(File::open(path).map_err(|e| format!("{:?}", e))?); // Iterate over all entries in the archive: while let Some(entry_result) = archive.next_entry() { @@ -38,14 +35,9 @@ impl MetadataLoader for CraneliftMetadataLoader { } Err("couldn't find metadata entry".to_string()) - //self.get_dylib_metadata(target, path) } - fn get_dylib_metadata( - &self, - _target: &Target, - path: &Path, - ) -> Result<owning_ref::ErasedBoxRef<[u8]>, String> { + fn get_dylib_metadata(&self, _target: &Target, path: &Path) -> Result<MetadataRef, String> { use object::{Object, ObjectSection}; let file = std::fs::read(path).map_err(|e| format!("read:{:?}", e))?; let file = object::File::parse(&file).map_err(|e| format!("parse: {:?}", e))?; |
