diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2018-12-01 17:27:12 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-05-23 18:51:52 +0200 |
| commit | a58999c19e58d21734622d3e1b4b2de4c0bc7a5b (patch) | |
| tree | ffd58ec3188e366660aa9f3880224119f5353f1d /src | |
| parent | 469831f4da99c9db5c3555c74313cbcf5e9f351d (diff) | |
| download | rust-a58999c19e58d21734622d3e1b4b2de4c0bc7a5b.tar.gz rust-a58999c19e58d21734622d3e1b4b2de4c0bc7a5b.zip | |
Update dylib_dependency_formats, extern_crate and reachable_non_generics
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/arena.rs | 3 | ||||
| -rw-r--r-- | src/librustc/query/mod.rs | 6 | ||||
| -rw-r--r-- | src/librustc/ty/print/pretty.rs | 4 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/back/symbol_export.rs | 7 | ||||
| -rw-r--r-- | src/librustc_metadata/cstore_impl.rs | 8 | ||||
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 10 | ||||
| -rw-r--r-- | src/librustc_save_analysis/lib.rs | 4 |
7 files changed, 23 insertions, 19 deletions
diff --git a/src/librustc/arena.rs b/src/librustc/arena.rs index 98678b1f28c..6312a6cfcd6 100644 --- a/src/librustc/arena.rs +++ b/src/librustc/arena.rs @@ -96,6 +96,9 @@ macro_rules! arena_types { [few] visible_parent_map: rustc::util::nodemap::DefIdMap<rustc::hir::def_id::DefId>, [few] foreign_module: rustc::middle::cstore::ForeignModule, [few] foreign_modules: Vec<rustc::middle::cstore::ForeignModule>, + [few] reachable_non_generics: rustc::util::nodemap::DefIdMap< + rustc::middle::exported_symbols::SymbolExportLevel + >, ], $tcx); ) } diff --git a/src/librustc/query/mod.rs b/src/librustc/query/mod.rs index ff8acf5126e..68d3cb65729 100644 --- a/src/librustc/query/mod.rs +++ b/src/librustc/query/mod.rs @@ -590,7 +590,7 @@ rustc_queries! { Other { query dylib_dependency_formats(_: CrateNum) - -> Lrc<Vec<(CrateNum, LinkagePreference)>> { + -> &'tcx [(CrateNum, LinkagePreference)] { desc { "dylib dependency formats of crate" } } } @@ -625,7 +625,7 @@ rustc_queries! { desc { "test whether a crate has #![no_builtins]" } } - query extern_crate(_: DefId) -> Lrc<Option<ExternCrate>> { + query extern_crate(_: DefId) -> Option<&'tcx ExternCrate> { eval_always desc { "getting crate's ExternCrateData" } } @@ -671,7 +671,7 @@ rustc_queries! { // Does not include external symbols that don't have a corresponding DefId, // like the compiler-generated `main` function and so on. query reachable_non_generics(_: CrateNum) - -> Lrc<DefIdMap<SymbolExportLevel>> { + -> &'tcx DefIdMap<SymbolExportLevel> { desc { "looking up the exported symbols of a crate" } } query is_reachable_non_generic(_: DefId) -> bool {} diff --git a/src/librustc/ty/print/pretty.rs b/src/librustc/ty/print/pretty.rs index 7a8d5d3bb9a..06db4b9b65b 100644 --- a/src/librustc/ty/print/pretty.rs +++ b/src/librustc/ty/print/pretty.rs @@ -253,8 +253,8 @@ pub trait PrettyPrinter<'gcx: 'tcx, 'tcx>: // 2. for an extern inferred from a path or an indirect crate, // where there is no explicit `extern crate`, we just prepend // the crate name. - match *self.tcx().extern_crate(def_id) { - Some(ExternCrate { + match self.tcx().extern_crate(def_id) { + Some(&ExternCrate { src: ExternCrateSource::Extern(def_id), direct: true, span, diff --git a/src/librustc_codegen_ssa/back/symbol_export.rs b/src/librustc_codegen_ssa/back/symbol_export.rs index 616049ea112..fb7ef876462 100644 --- a/src/librustc_codegen_ssa/back/symbol_export.rs +++ b/src/librustc_codegen_ssa/back/symbol_export.rs @@ -1,4 +1,3 @@ -use rustc_data_structures::sync::Lrc; use std::sync::Arc; use rustc::ty::Instance; @@ -49,12 +48,12 @@ pub fn crates_export_threshold(crate_types: &[config::CrateType]) -> SymbolExpor fn reachable_non_generics_provider<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, cnum: CrateNum) - -> Lrc<DefIdMap<SymbolExportLevel>> + -> &'tcx DefIdMap<SymbolExportLevel> { assert_eq!(cnum, LOCAL_CRATE); if !tcx.sess.opts.output_types.should_codegen() { - return Default::default(); + return tcx.arena.alloc(Default::default()); } // Check to see if this crate is a "special runtime crate". These @@ -155,7 +154,7 @@ fn reachable_non_generics_provider<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, reachable_non_generics.insert(id, SymbolExportLevel::C); } - Lrc::new(reachable_non_generics) + tcx.arena.alloc(reachable_non_generics) } fn is_reachable_non_generic_provider_local<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index f0dde17beee..fae4c244d6e 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -163,7 +163,7 @@ provide! { <'tcx> tcx, def_id, other, cdata, } is_mir_available => { cdata.is_item_mir_available(def_id.index) } - dylib_dependency_formats => { Lrc::new(cdata.get_dylib_dependency_formats()) } + dylib_dependency_formats => { cdata.get_dylib_dependency_formats(tcx) } is_panic_runtime => { cdata.root.panic_runtime } is_compiler_builtins => { cdata.root.compiler_builtins } has_global_allocator => { cdata.root.has_global_allocator } @@ -172,8 +172,8 @@ provide! { <'tcx> tcx, def_id, other, cdata, is_profiler_runtime => { cdata.root.profiler_runtime } panic_strategy => { cdata.root.panic_strategy } extern_crate => { - let r = Lrc::new(*cdata.extern_crate.lock()); - r + let r = *cdata.extern_crate.lock(); + r.map(|c| &*tcx.arena.alloc(c)) } is_no_builtins => { cdata.root.no_builtins } impl_defaultness => { cdata.get_impl_defaultness(def_id.index) } @@ -190,7 +190,7 @@ provide! { <'tcx> tcx, def_id, other, cdata, }) .collect(); - Lrc::new(reachable_non_generics) + tcx.arena.alloc(reachable_non_generics) } native_libraries => { Lrc::new(cdata.get_native_libraries(tcx.sess)) } foreign_modules => { cdata.get_foreign_modules(tcx) } diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index b287db498fc..958c81989ff 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -1097,16 +1097,18 @@ impl<'a, 'tcx> CrateMetadata { } } - pub fn get_dylib_dependency_formats(&self) -> Vec<(CrateNum, LinkagePreference)> { - self.root + pub fn get_dylib_dependency_formats( + &self, + tcx: TyCtxt<'_, 'tcx, '_>, + ) -> &'tcx [(CrateNum, LinkagePreference)] { + tcx.arena.alloc_from_iter(self.root .dylib_dependency_formats .decode(self) .enumerate() .flat_map(|(i, link)| { let cnum = CrateNum::new(i + 1); link.map(|link| (self.cnum_map[cnum], link)) - }) - .collect() + })) } pub fn get_missing_lang_items( diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 45ace5b3766..55471dbc00b 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -109,8 +109,8 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { let mut result = Vec::with_capacity(self.tcx.crates().len()); for &n in self.tcx.crates().iter() { - let span = match *self.tcx.extern_crate(n.as_def_id()) { - Some(ExternCrate { span, .. }) => span, + let span = match self.tcx.extern_crate(n.as_def_id()) { + Some(&ExternCrate { span, .. }) => span, None => { debug!("Skipping crate {}, no data", n); continue; |
