From 7e72b36299d54eb3e39991c9b2a9cbaeacccda3e Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Tue, 26 Nov 2019 23:16:48 +0100 Subject: [PATCH] Move local Arena to Queries. --- src/librustc/ty/context.rs | 5 +++-- src/librustc_interface/passes.rs | 5 ++++- src/librustc_interface/queries.rs | 7 ++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 954565811694f..91afa0153c8b3 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -995,7 +995,7 @@ impl<'tcx> Deref for TyCtxt<'tcx> { } pub struct GlobalCtxt<'tcx> { - pub arena: WorkerLocal>, + pub arena: &'tcx WorkerLocal>, interners: CtxtInterners<'tcx>, @@ -1170,6 +1170,7 @@ impl<'tcx> TyCtxt<'tcx> { local_providers: ty::query::Providers<'tcx>, extern_providers: ty::query::Providers<'tcx>, arenas: &'tcx AllArenas, + local_arena: &'tcx WorkerLocal>, resolutions: ty::ResolverOutputs, hir: hir_map::Map<'tcx>, on_disk_query_result_cache: query::OnDiskCache<'tcx>, @@ -1225,7 +1226,7 @@ impl<'tcx> TyCtxt<'tcx> { sess: s, lint_store, cstore, - arena: WorkerLocal::new(|_| Arena::default()), + arena: local_arena, interners, dep_graph, prof: s.prof.clone(), diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs index b264f1d3fe70f..963663e7d0390 100644 --- a/src/librustc_interface/passes.rs +++ b/src/librustc_interface/passes.rs @@ -3,6 +3,7 @@ use crate::util; use crate::proc_macro_decls; use log::{info, warn, log_enabled}; +use rustc::arena::Arena; use rustc::dep_graph::DepGraph; use rustc::hir; use rustc::hir::lowering::lower_crate; @@ -22,7 +23,7 @@ use rustc_codegen_ssa::back::link::emit_metadata; use rustc_codegen_utils::codegen_backend::CodegenBackend; use rustc_codegen_utils::link::filename_for_metadata; use rustc_data_structures::{box_region_allow_access, declare_box_region_type, parallel}; -use rustc_data_structures::sync::{Lrc, Once, ParallelIterator, par_iter}; +use rustc_data_structures::sync::{Lrc, Once, ParallelIterator, par_iter, WorkerLocal}; use rustc_errors::PResult; use rustc_incremental; use rustc_metadata::cstore; @@ -764,6 +765,7 @@ pub fn create_global_ctxt<'gcx>( crate_name: &str, global_ctxt: &'gcx Once>, arenas: &'gcx Once, + local_arena: &'gcx WorkerLocal>, ) -> BoxedGlobalCtxt<'gcx> { let sess = &compiler.session(); let defs = mem::take(&mut resolver_outputs.definitions); @@ -798,6 +800,7 @@ pub fn create_global_ctxt<'gcx>( local_providers, extern_providers, &arenas, + local_arena, resolver_outputs, hir_map, query_result_on_disk_cache, diff --git a/src/librustc_interface/queries.rs b/src/librustc_interface/queries.rs index a90483f8c7104..4e9e476c64b99 100644 --- a/src/librustc_interface/queries.rs +++ b/src/librustc_interface/queries.rs @@ -2,10 +2,11 @@ use crate::interface::{Compiler, Result}; use crate::passes::{self, BoxedResolver, BoxedGlobalCtxt}; use rustc_incremental::DepGraphFuture; -use rustc_data_structures::sync::{Lrc, Once}; +use rustc_data_structures::sync::{Lrc, Once, WorkerLocal}; use rustc_codegen_utils::codegen_backend::CodegenBackend; use rustc::session::config::{OutputFilenames, OutputType}; use rustc::util::common::{time, ErrorReported}; +use rustc::arena::Arena; use rustc::hir; use rustc::lint; use rustc::session::Session; @@ -74,6 +75,8 @@ pub struct Queries<'comp> { arenas: Once, forest: Once, + local_arena: WorkerLocal>, + dep_graph_future: Query>, parse: Query, crate_name: Query, @@ -93,6 +96,7 @@ impl<'comp> Queries<'comp> { gcx: Once::new(), arenas: Once::new(), forest: Once::new(), + local_arena: WorkerLocal::new(|_| Arena::default()), dep_graph_future: Default::default(), parse: Default::default(), crate_name: Default::default(), @@ -265,6 +269,7 @@ impl<'comp> Queries<'comp> { &crate_name, &self.gcx, &self.arenas, + &self.local_arena, )) }) }