diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs index b91a9644b211a..f4b4404338961 100644 --- a/src/librustc/middle/cstore.rs +++ b/src/librustc/middle/cstore.rs @@ -42,11 +42,6 @@ pub use self::NativeLibraryKind::*; // lonely orphan structs and enums looking for a better home -#[derive(Clone, Debug, Copy)] -pub struct LinkMeta { - pub crate_hash: Svh, -} - /// Where a crate came from on the local filesystem. One of these three options /// must be non-None. #[derive(PartialEq, Clone, Debug)] @@ -233,8 +228,7 @@ pub trait CrateStore { // utility functions fn encode_metadata<'a, 'tcx>(&self, - tcx: TyCtxt<'a, 'tcx, 'tcx>, - link_meta: &LinkMeta) + tcx: TyCtxt<'a, 'tcx, 'tcx>) -> EncodedMetadata; fn metadata_encoding_version(&self) -> &[u8]; } diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index bb14af29a7afe..12b07e7cc3f82 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -26,7 +26,7 @@ use lint::{self, Lint}; use ich::{StableHashingContext, NodeIdHashingMode}; use infer::canonical::{CanonicalVarInfo, CanonicalVarInfos}; use infer::outlives::free_region_map::FreeRegionMap; -use middle::cstore::{CrateStoreDyn, LinkMeta}; +use middle::cstore::CrateStoreDyn; use middle::cstore::EncodedMetadata; use middle::lang_items; use middle::resolve_lifetime::{self, ObjectLifetimeDefault}; @@ -1491,10 +1491,10 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { } impl<'a, 'tcx> TyCtxt<'a, 'tcx, 'tcx> { - pub fn encode_metadata(self, link_meta: &LinkMeta) + pub fn encode_metadata(self) -> EncodedMetadata { - self.cstore.encode_metadata(self, link_meta) + self.cstore.encode_metadata(self) } } diff --git a/src/librustc_codegen_llvm/back/link.rs b/src/librustc_codegen_llvm/back/link.rs index 37c99932f565c..373ddafee51f7 100644 --- a/src/librustc_codegen_llvm/back/link.rs +++ b/src/librustc_codegen_llvm/back/link.rs @@ -47,8 +47,7 @@ use std::str; use syntax::attr; pub use rustc_codegen_utils::link::{find_crate_name, filename_for_input, default_output_for_target, - invalid_output_for_target, build_link_meta, out_filename, - check_file_is_writeable}; + invalid_output_for_target, out_filename, check_file_is_writeable}; // The third parameter is for env vars, used on windows to set up the // path for MSVC to find its DLLs, and gcc to find its bundled diff --git a/src/librustc_codegen_llvm/back/write.rs b/src/librustc_codegen_llvm/back/write.rs index b62836ec255d4..888fb70e96984 100644 --- a/src/librustc_codegen_llvm/back/write.rs +++ b/src/librustc_codegen_llvm/back/write.rs @@ -19,7 +19,7 @@ use base; use consts; use rustc_incremental::{copy_cgu_workproducts_to_incr_comp_cache_dir, in_incr_comp_dir}; use rustc::dep_graph::{WorkProduct, WorkProductId, WorkProductFileKind}; -use rustc::middle::cstore::{LinkMeta, EncodedMetadata}; +use rustc::middle::cstore::EncodedMetadata; use rustc::session::config::{self, OutputFilenames, OutputType, Passes, Sanitizer, Lto}; use rustc::session::Session; use rustc::util::nodemap::FxHashMap; @@ -32,6 +32,7 @@ use rustc::ty::TyCtxt; use rustc::util::common::{time_ext, time_depth, set_time_depth, print_time_passes_entry}; use rustc_fs_util::{path2cstr, link_or_copy}; use rustc_data_structures::small_c_str::SmallCStr; +use rustc_data_structures::svh::Svh; use errors::{self, Handler, Level, DiagnosticBuilder, FatalError, DiagnosticId}; use errors::emitter::{Emitter}; use syntax::attr; @@ -912,13 +913,13 @@ fn need_crate_bitcode_for_rlib(sess: &Session) -> bool { pub fn start_async_codegen(tcx: TyCtxt, time_graph: Option, - link: LinkMeta, metadata: EncodedMetadata, coordinator_receive: Receiver>, total_cgus: usize) -> OngoingCodegen { let sess = tcx.sess; let crate_name = tcx.crate_name(LOCAL_CRATE); + let crate_hash = tcx.crate_hash(LOCAL_CRATE); let no_builtins = attr::contains_name(&tcx.hir.krate().attrs, "no_builtins"); let subsystem = attr::first_attr_value_str_by_name(&tcx.hir.krate().attrs, "windows_subsystem"); @@ -1037,7 +1038,7 @@ pub fn start_async_codegen(tcx: TyCtxt, OngoingCodegen { crate_name, - link, + crate_hash, metadata, windows_subsystem, linker_info, @@ -2268,7 +2269,7 @@ impl SharedEmitterMain { pub struct OngoingCodegen { crate_name: Symbol, - link: LinkMeta, + crate_hash: Svh, metadata: EncodedMetadata, windows_subsystem: Option, linker_info: LinkerInfo, @@ -2319,7 +2320,7 @@ impl OngoingCodegen { (CodegenResults { crate_name: self.crate_name, - link: self.link, + crate_hash: self.crate_hash, metadata: self.metadata, windows_subsystem: self.windows_subsystem, linker_info: self.linker_info, diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs index bd0c62e4766ae..9ce3354533f4d 100644 --- a/src/librustc_codegen_llvm/base.rs +++ b/src/librustc_codegen_llvm/base.rs @@ -29,7 +29,6 @@ use super::ModuleCodegen; use super::ModuleKind; use abi; -use back::link; use back::write::{self, OngoingCodegen}; use llvm::{self, TypeKind, get_param}; use metadata; @@ -42,7 +41,7 @@ use rustc::ty::{self, Ty, TyCtxt}; use rustc::ty::layout::{self, Align, TyLayout, LayoutOf}; use rustc::ty::query::Providers; use rustc::dep_graph::{DepNode, DepConstructor}; -use rustc::middle::cstore::{self, LinkMeta, LinkagePreference}; +use rustc::middle::cstore::{self, LinkagePreference}; use rustc::middle::exported_symbols; use rustc::util::common::{time, print_time_passes_entry}; use rustc::util::profiling::ProfileCategory; @@ -608,8 +607,7 @@ fn maybe_create_entry_wrapper(cx: &CodegenCx) { } fn write_metadata<'a, 'gcx>(tcx: TyCtxt<'a, 'gcx, 'gcx>, - llvm_module: &ModuleLlvm, - link_meta: &LinkMeta) + llvm_module: &ModuleLlvm) -> EncodedMetadata { use std::io::Write; use flate2::Compression; @@ -641,7 +639,7 @@ fn write_metadata<'a, 'gcx>(tcx: TyCtxt<'a, 'gcx, 'gcx>, return EncodedMetadata::new(); } - let metadata = tcx.encode_metadata(link_meta); + let metadata = tcx.encode_metadata(); if kind == MetadataKind::Uncompressed { return metadata; } @@ -719,8 +717,6 @@ pub fn codegen_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, tcx.sess.fatal("this compiler's LLVM does not support PGO"); } - let crate_hash = tcx.crate_hash(LOCAL_CRATE); - let link_meta = link::build_link_meta(crate_hash); let cgu_name_builder = &mut CodegenUnitNameBuilder::new(tcx); // Codegen the metadata. @@ -732,7 +728,7 @@ pub fn codegen_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, .to_string(); let metadata_llvm_module = ModuleLlvm::new(tcx.sess, &metadata_cgu_name); let metadata = time(tcx.sess, "write metadata", || { - write_metadata(tcx, &metadata_llvm_module, &link_meta) + write_metadata(tcx, &metadata_llvm_module) }); tcx.sess.profiler(|p| p.end_activity(ProfileCategory::Codegen)); @@ -754,7 +750,6 @@ pub fn codegen_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, let ongoing_codegen = write::start_async_codegen( tcx, time_graph.clone(), - link_meta, metadata, rx, 1); @@ -789,7 +784,6 @@ pub fn codegen_crate<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, let ongoing_codegen = write::start_async_codegen( tcx, time_graph.clone(), - link_meta, metadata, rx, codegen_units.len()); diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs index a65511a24af72..03a2e0a82cf10 100644 --- a/src/librustc_codegen_llvm/lib.rs +++ b/src/librustc_codegen_llvm/lib.rs @@ -88,6 +88,7 @@ use rustc::util::nodemap::{FxHashSet, FxHashMap}; use rustc::util::profiling::ProfileCategory; use rustc_mir::monomorphize; use rustc_codegen_utils::codegen_backend::CodegenBackend; +use rustc_data_structures::svh::Svh; mod diagnostics; @@ -251,7 +252,7 @@ impl CodegenBackend for LlvmCodegenBackend { // Now that we won't touch anything in the incremental compilation directory // any more, we can finalize it (which involves renaming it) - rustc_incremental::finalize_session_directory(sess, ongoing_codegen.link.crate_hash); + rustc_incremental::finalize_session_directory(sess, ongoing_codegen.crate_hash); Ok(()) } @@ -389,7 +390,7 @@ struct CodegenResults { modules: Vec, allocator_module: Option, metadata_module: CompiledModule, - link: rustc::middle::cstore::LinkMeta, + crate_hash: Svh, metadata: rustc::middle::cstore::EncodedMetadata, windows_subsystem: Option, linker_info: back::linker::LinkerInfo, diff --git a/src/librustc_codegen_utils/codegen_backend.rs b/src/librustc_codegen_utils/codegen_backend.rs index ae8f65303a7fe..d693e088360d4 100644 --- a/src/librustc_codegen_utils/codegen_backend.rs +++ b/src/librustc_codegen_utils/codegen_backend.rs @@ -44,7 +44,7 @@ use rustc::dep_graph::DepGraph; use rustc_target::spec::Target; use rustc_data_structures::fx::FxHashMap; use rustc_mir::monomorphize::collector; -use link::{build_link_meta, out_filename}; +use link::out_filename; pub use rustc_data_structures::sync::MetadataRef; @@ -180,8 +180,7 @@ impl CodegenBackend for MetadataOnlyCodegenBackend { } tcx.sess.abort_if_errors(); - let link_meta = build_link_meta(tcx.crate_hash(LOCAL_CRATE)); - let metadata = tcx.encode_metadata(&link_meta); + let metadata = tcx.encode_metadata(); box OngoingCodegen { metadata: metadata, diff --git a/src/librustc_codegen_utils/link.rs b/src/librustc_codegen_utils/link.rs index a0d88ccae0f13..75f1d614ae72f 100644 --- a/src/librustc_codegen_utils/link.rs +++ b/src/librustc_codegen_utils/link.rs @@ -10,8 +10,6 @@ use rustc::session::config::{self, OutputFilenames, Input, OutputType}; use rustc::session::Session; -use rustc::middle::cstore::LinkMeta; -use rustc_data_structures::svh::Svh; use std::path::{Path, PathBuf}; use syntax::{ast, attr}; use syntax_pos::Span; @@ -50,14 +48,6 @@ fn is_writeable(p: &Path) -> bool { } } -pub fn build_link_meta(crate_hash: Svh) -> LinkMeta { - let r = LinkMeta { - crate_hash, - }; - info!("{:?}", r); - return r; -} - pub fn find_crate_name(sess: Option<&Session>, attrs: &[ast::Attribute], input: &Input) -> String { diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index 4926da3b880e7..778ca9c20d78a 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -17,7 +17,6 @@ use schema; use rustc::ty::query::QueryConfig; use rustc::middle::cstore::{CrateStore, DepKind, - LinkMeta, EncodedMetadata, NativeLibraryKind}; use rustc::middle::exported_symbols::ExportedSymbol; use rustc::middle::stability::DeprecationEntry; @@ -567,11 +566,10 @@ impl CrateStore for cstore::CStore { } fn encode_metadata<'a, 'tcx>(&self, - tcx: TyCtxt<'a, 'tcx, 'tcx>, - link_meta: &LinkMeta) + tcx: TyCtxt<'a, 'tcx, 'tcx>) -> EncodedMetadata { - encoder::encode_metadata(tcx, link_meta) + encoder::encode_metadata(tcx) } fn metadata_encoding_version(&self) -> &[u8] diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index 7c445cb715e7c..f9a392eb3ba76 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -13,7 +13,7 @@ use index_builder::{FromId, IndexBuilder, Untracked}; use isolated_encoder::IsolatedEncoder; use schema::*; -use rustc::middle::cstore::{LinkMeta, LinkagePreference, NativeLibrary, +use rustc::middle::cstore::{LinkagePreference, NativeLibrary, EncodedMetadata, ForeignModule}; use rustc::hir::def::CtorKind; use rustc::hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefIndex, DefId, LocalDefId, LOCAL_CRATE}; @@ -52,7 +52,6 @@ use rustc::hir::intravisit; pub struct EncodeContext<'a, 'tcx: 'a> { opaque: opaque::Encoder, pub tcx: TyCtxt<'a, 'tcx, 'tcx>, - link_meta: &'a LinkMeta, lazy_state: LazyState, type_shorthands: FxHashMap, usize>, @@ -482,7 +481,6 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> { let index_bytes = self.position() - i; let attrs = tcx.hir.krate_attrs(); - let link_meta = self.link_meta; let is_proc_macro = tcx.sess.crate_types.borrow().contains(&CrateType::ProcMacro); let has_default_lib_allocator = attr::contains_name(&attrs, "default_lib_allocator"); let has_global_allocator = *tcx.sess.has_global_allocator.get(); @@ -491,7 +489,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> { name: tcx.crate_name(LOCAL_CRATE), extra_filename: tcx.sess.opts.cg.extra_filename.clone(), triple: tcx.sess.opts.target_triple.clone(), - hash: link_meta.crate_hash, + hash: tcx.crate_hash(LOCAL_CRATE), disambiguator: tcx.sess.local_crate_disambiguator(), panic_strategy: tcx.sess.panic_strategy(), edition: hygiene::default_edition(), @@ -1824,8 +1822,7 @@ impl<'a, 'tcx, 'v> ItemLikeVisitor<'v> for ImplVisitor<'a, 'tcx> { // will allow us to slice the metadata to the precise length that we just // generated regardless of trailing bytes that end up in it. -pub fn encode_metadata<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, - link_meta: &LinkMeta) +pub fn encode_metadata<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> EncodedMetadata { let mut encoder = opaque::Encoder::new(vec![]); @@ -1838,7 +1835,6 @@ pub fn encode_metadata<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, let mut ecx = EncodeContext { opaque: encoder, tcx, - link_meta, lazy_state: LazyState::NoNode, type_shorthands: Default::default(), predicate_shorthands: Default::default(),