diff options
| author | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2018-12-01 17:14:40 +0100 |
|---|---|---|
| committer | John Kåre Alsaker <john.kare.alsaker@gmail.com> | 2019-05-23 18:51:51 +0200 |
| commit | 469831f4da99c9db5c3555c74313cbcf5e9f351d (patch) | |
| tree | a5ac4551a3fdfdcf61262c1c87dfd3580b6c0dd9 | |
| parent | 2f74d90ef3e4f6d38d4ae331a8f277fe92b3dbce (diff) | |
| download | rust-469831f4da99c9db5c3555c74313cbcf5e9f351d.tar.gz rust-469831f4da99c9db5c3555c74313cbcf5e9f351d.zip | |
Update foreign_modules and dllimport_foreign_items
| -rw-r--r-- | src/librustc/arena.rs | 2 | ||||
| -rw-r--r-- | src/librustc/query/mod.rs | 4 | ||||
| -rw-r--r-- | src/librustc_codegen_ssa/base.rs | 3 | ||||
| -rw-r--r-- | src/librustc_metadata/cstore_impl.rs | 4 | ||||
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 9 |
5 files changed, 13 insertions, 9 deletions
diff --git a/src/librustc/arena.rs b/src/librustc/arena.rs index df40d12477d..98678b1f28c 100644 --- a/src/librustc/arena.rs +++ b/src/librustc/arena.rs @@ -94,6 +94,8 @@ macro_rules! arena_types { [few] get_lib_features: rustc::middle::lib_features::LibFeatures, [few] defined_lib_features: rustc::middle::lang_items::LanguageItems, [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>, ], $tcx); ) } diff --git a/src/librustc/query/mod.rs b/src/librustc/query/mod.rs index ad328479533..ff8acf5126e 100644 --- a/src/librustc/query/mod.rs +++ b/src/librustc/query/mod.rs @@ -689,7 +689,7 @@ rustc_queries! { } Other { - query foreign_modules(_: CrateNum) -> Lrc<Vec<ForeignModule>> { + query foreign_modules(_: CrateNum) -> &'tcx [ForeignModule] { desc { "looking up the foreign modules of a linked crate" } } @@ -736,7 +736,7 @@ rustc_queries! { Other { query dllimport_foreign_items(_: CrateNum) - -> Lrc<FxHashSet<DefId>> { + -> &'tcx FxHashSet<DefId> { desc { "dllimport_foreign_items" } } query is_dllimport_foreign_item(_: DefId) -> bool {} diff --git a/src/librustc_codegen_ssa/base.rs b/src/librustc_codegen_ssa/base.rs index 3cd47dfbb29..0b037f87247 100644 --- a/src/librustc_codegen_ssa/base.rs +++ b/src/librustc_codegen_ssa/base.rs @@ -33,7 +33,6 @@ use rustc_mir::monomorphize::Instance; use rustc_mir::monomorphize::partitioning::{CodegenUnit, CodegenUnitExt}; use rustc::util::nodemap::FxHashMap; use rustc_data_structures::indexed_vec::Idx; -use rustc_data_structures::sync::Lrc; use rustc_codegen_utils::{symbol_names_test, check_for_rustc_errors_attr}; use rustc::ty::layout::{FAT_PTR_ADDR, FAT_PTR_EXTRA}; use crate::mir::place::PlaceRef; @@ -916,7 +915,7 @@ pub fn provide_both(providers: &mut Providers<'_>) { .map(|id| &module_map[&id]) .flat_map(|module| module.foreign_items.iter().cloned()) .collect(); - Lrc::new(dllimports) + tcx.arena.alloc(dllimports) }; providers.is_dllimport_foreign_item = |tcx, def_id| { diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index 72ff80db73c..f0dde17beee 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -193,7 +193,7 @@ provide! { <'tcx> tcx, def_id, other, cdata, Lrc::new(reachable_non_generics) } native_libraries => { Lrc::new(cdata.get_native_libraries(tcx.sess)) } - foreign_modules => { Lrc::new(cdata.get_foreign_modules(tcx.sess)) } + foreign_modules => { cdata.get_foreign_modules(tcx) } plugin_registrar_fn => { cdata.root.plugin_registrar_fn.map(|index| { DefId { krate: def_id.krate, index } @@ -285,7 +285,7 @@ pub fn provide<'tcx>(providers: &mut Providers<'tcx>) { }, foreign_modules: |tcx, cnum| { assert_eq!(cnum, LOCAL_CRATE); - Lrc::new(foreign_modules::collect(tcx)) + &tcx.arena.alloc(foreign_modules::collect(tcx))[..] }, link_args: |tcx, cnum| { assert_eq!(cnum, LOCAL_CRATE); diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index ea79161a6d9..b287db498fc 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -1085,12 +1085,15 @@ impl<'a, 'tcx> CrateMetadata { } } - pub fn get_foreign_modules(&self, sess: &Session) -> Vec<ForeignModule> { + pub fn get_foreign_modules( + &self, + tcx: TyCtxt<'_, 'tcx, '_>, + ) -> &'tcx [ForeignModule] { if self.proc_macros.is_some() { // Proc macro crates do not have any *target* foreign modules. - vec![] + &[] } else { - self.root.foreign_modules.decode((self, sess)).collect() + tcx.arena.alloc_from_iter(self.root.foreign_modules.decode((self, tcx.sess))) } } |
