X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_metadata%2Fcstore_impl.rs;h=c5f830c0d042054d04a4d8769bf9f429d2bb887a;hb=f49f38871389041671cc710a044e8360091840a3;hp=d942a19194a1443d69a35a34a52daf3502f0c152;hpb=0d755ff6723284bfb0f9e9b3d1ab932ae10c97d3;p=rust.git diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index d942a19194a..c5f830c0d04 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -9,7 +9,6 @@ use rustc::middle::cstore::{CrateSource, CrateStore, DepKind, EncodedMetadata, NativeLibraryKind}; use rustc::middle::exported_symbols::ExportedSymbol; use rustc::middle::stability::DeprecationEntry; -use rustc::middle::dependency_format::Linkage; use rustc::hir::def; use rustc::hir; use rustc::session::{CrateDisambiguator, Session}; @@ -235,26 +234,11 @@ fn into_args(self) -> (DefId, DefId) { (self.0.as_def_id(), self.1) } used_crate_source => { Lrc::new(cdata.source.clone()) } exported_symbols => { - let mut syms = cdata.exported_symbols(tcx); - - // When linked into a dylib crates don't export their generic symbols, - // so if that's happening then we can't load upstream monomorphizations - // from this crate. - let formats = tcx.dependency_formats(LOCAL_CRATE); - let remove_generics = formats.iter().any(|(_ty, list)| { - match list.get(def_id.krate.as_usize() - 1) { - Some(Linkage::IncludedFromDylib) | Some(Linkage::Dynamic) => true, - _ => false, - } - }); - if remove_generics { - syms.retain(|(sym, _threshold)| { - match sym { - ExportedSymbol::Generic(..) => false, - _ => return true, - } - }); - } + let syms = cdata.exported_symbols(tcx); + + // FIXME rust-lang/rust#64319, rust-lang/rust#64872: We want + // to block export of generics from dylibs, but we must fix + // rust-lang/rust#65890 before we can do that robustly. Arc::new(syms) } @@ -440,7 +424,7 @@ pub fn load_macro_untracked(&self, id: DefId, sess: &Session) -> LoadedMacro { let source_file = sess.parse_sess.source_map().new_source_file(source_name, def.body); let local_span = Span::with_root_ctxt(source_file.start_pos, source_file.end_pos); let (body, mut errors) = source_file_to_stream(&sess.parse_sess, source_file, None); - emit_unclosed_delims(&mut errors, &sess.diagnostic()); + emit_unclosed_delims(&mut errors, &sess.parse_sess); // Mark the attrs as used let attrs = data.get_item_attrs(id.index, sess); @@ -505,6 +489,10 @@ fn crate_hash_untracked(&self, cnum: CrateNum) -> Svh self.get_crate_data(cnum).root.hash } + fn crate_host_hash_untracked(&self, cnum: CrateNum) -> Option { + self.get_crate_data(cnum).host_hash + } + /// Returns the `DefKey` for a given `DefId`. This indicates the /// parent `DefId` as well as some idea of what kind of data the /// `DefId` refers to.