Skip to content

Commit

Permalink
Auto merge of #78134 - bugadani:arena-nodrop, r=lcnr
Browse files Browse the repository at this point in the history
Use `DroplessArena` where we know the type doesn't need drop

This PR uses a single `DroplessArena` in resolve instead of three separate `TypedArena`s.

`DroplessArena` checks that the type indeed doesn't need drop, so in case the types change, this will result in visible failures.
  • Loading branch information
bors committed Oct 22, 2020
2 parents 8f0fa9d + 9b453d6 commit 6b9fbf2
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 13 deletions.
12 changes: 5 additions & 7 deletions compiler/rustc_resolve/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ pub use rustc_hir::def::{Namespace, PerNS};

use Determinacy::*;

use rustc_arena::TypedArena;
use rustc_arena::{DroplessArena, TypedArena};
use rustc_ast::node_id::NodeMap;
use rustc_ast::unwrap_or;
use rustc_ast::visit::{self, Visitor};
Expand Down Expand Up @@ -1035,12 +1035,10 @@ pub struct Resolver<'a> {
pub struct ResolverArenas<'a> {
modules: TypedArena<ModuleData<'a>>,
local_modules: RefCell<Vec<Module<'a>>>,
name_bindings: TypedArena<NameBinding<'a>>,
imports: TypedArena<Import<'a>>,
name_resolutions: TypedArena<RefCell<NameResolution<'a>>>,
macro_rules_bindings: TypedArena<MacroRulesBinding<'a>>,
ast_paths: TypedArena<ast::Path>,
pattern_spans: TypedArena<Span>,
dropless: DroplessArena,
}

impl<'a> ResolverArenas<'a> {
Expand All @@ -1055,7 +1053,7 @@ impl<'a> ResolverArenas<'a> {
self.local_modules.borrow()
}
fn alloc_name_binding(&'a self, name_binding: NameBinding<'a>) -> &'a NameBinding<'a> {
self.name_bindings.alloc(name_binding)
self.dropless.alloc(name_binding)
}
fn alloc_import(&'a self, import: Import<'a>) -> &'a Import<'_> {
self.imports.alloc(import)
Expand All @@ -1067,13 +1065,13 @@ impl<'a> ResolverArenas<'a> {
&'a self,
binding: MacroRulesBinding<'a>,
) -> &'a MacroRulesBinding<'a> {
self.macro_rules_bindings.alloc(binding)
self.dropless.alloc(binding)
}
fn alloc_ast_paths(&'a self, paths: &[ast::Path]) -> &'a [ast::Path] {
self.ast_paths.alloc_from_iter(paths.iter().cloned())
}
fn alloc_pattern_spans(&'a self, spans: impl Iterator<Item = Span>) -> &'a [Span] {
self.pattern_spans.alloc_from_iter(spans)
self.dropless.alloc_from_iter(spans)
}
}

Expand Down
6 changes: 3 additions & 3 deletions compiler/rustc_typeck/src/variance/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//! [rustc dev guide]: https://rustc-dev-guide.rust-lang.org/variance.html
use hir::Node;
use rustc_arena::TypedArena;
use rustc_arena::DroplessArena;
use rustc_hir as hir;
use rustc_hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
use rustc_middle::ty::query::Providers;
Expand Down Expand Up @@ -32,8 +32,8 @@ pub fn provide(providers: &mut Providers) {

fn crate_variances(tcx: TyCtxt<'_>, crate_num: CrateNum) -> CrateVariancesMap<'_> {
assert_eq!(crate_num, LOCAL_CRATE);
let mut arena = TypedArena::default();
let terms_cx = terms::determine_parameters_to_be_inferred(tcx, &mut arena);
let arena = DroplessArena::default();
let terms_cx = terms::determine_parameters_to_be_inferred(tcx, &arena);
let constraints_cx = constraints::add_constraints_from_crate(terms_cx);
solve::solve_constraints(constraints_cx)
}
Expand Down
6 changes: 3 additions & 3 deletions compiler/rustc_typeck/src/variance/terms.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
// `InferredIndex` is a newtype'd int representing the index of such
// a variable.

use rustc_arena::TypedArena;
use rustc_arena::DroplessArena;
use rustc_hir as hir;
use rustc_hir::itemlikevisit::ItemLikeVisitor;
use rustc_hir::HirIdMap;
Expand Down Expand Up @@ -47,7 +47,7 @@ impl<'a> fmt::Debug for VarianceTerm<'a> {

pub struct TermsContext<'a, 'tcx> {
pub tcx: TyCtxt<'tcx>,
pub arena: &'a TypedArena<VarianceTerm<'a>>,
pub arena: &'a DroplessArena,

// For marker types, UnsafeCell, and other lang items where
// variance is hardcoded, records the item-id and the hardcoded
Expand All @@ -64,7 +64,7 @@ pub struct TermsContext<'a, 'tcx> {

pub fn determine_parameters_to_be_inferred<'a, 'tcx>(
tcx: TyCtxt<'tcx>,
arena: &'a mut TypedArena<VarianceTerm<'a>>,
arena: &'a DroplessArena,
) -> TermsContext<'a, 'tcx> {
let mut terms_cx = TermsContext {
tcx,
Expand Down

0 comments on commit 6b9fbf2

Please sign in to comment.