diff --git a/src/librustc/arena.rs b/src/librustc/arena.rs index d2797e652407b..a52b883c3c314 100644 --- a/src/librustc/arena.rs +++ b/src/librustc/arena.rs @@ -78,6 +78,7 @@ macro_rules! arena_types { >, [few] resolve_lifetimes: rustc::middle::resolve_lifetime::ResolveLifetimes, [decode] generic_predicates: rustc::ty::GenericPredicates<'tcx>, + [few] lint_levels: rustc::lint::LintLevelMap, ], $tcx); ) } diff --git a/src/librustc/lint/mod.rs b/src/librustc/lint/mod.rs index 512e4d434434c..2a684f4b0bb45 100644 --- a/src/librustc/lint/mod.rs +++ b/src/librustc/lint/mod.rs @@ -21,7 +21,7 @@ pub use self::Level::*; pub use self::LintSource::*; -use rustc_data_structures::sync::{self, Lrc}; +use rustc_data_structures::sync; use crate::hir::def_id::{CrateNum, LOCAL_CRATE}; use crate::hir::intravisit; @@ -767,7 +767,7 @@ pub fn maybe_lint_level_root(tcx: TyCtxt<'_, '_, '_>, id: hir::HirId) -> bool { } fn lint_levels<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, cnum: CrateNum) - -> Lrc + -> &'tcx LintLevelMap { assert_eq!(cnum, LOCAL_CRATE); let mut builder = LintLevelMapBuilder { @@ -784,7 +784,7 @@ fn lint_levels<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, cnum: CrateNum) intravisit::walk_crate(&mut builder, krate); builder.levels.pop(push); - Lrc::new(builder.levels.build_map()) + tcx.arena.alloc(builder.levels.build_map()) } struct LintLevelMapBuilder<'a, 'tcx: 'a> { diff --git a/src/librustc/query/mod.rs b/src/librustc/query/mod.rs index 1b9c8e864d65c..4cbda01e13f86 100644 --- a/src/librustc/query/mod.rs +++ b/src/librustc/query/mod.rs @@ -67,7 +67,7 @@ rustc_queries! { desc { "looking up the native libraries of a linked crate" } } - query lint_levels(_: CrateNum) -> Lrc { + query lint_levels(_: CrateNum) -> &'tcx lint::LintLevelMap { eval_always desc { "computing the lint levels for items in this crate" } }