diff options
| author | Deadbeef <ent3rm4n@gmail.com> | 2022-07-22 16:48:36 +0000 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2022-09-14 19:02:44 +0200 |
| commit | eb19a8a6208d992d6d4e661be8fa80c1eeab01f6 (patch) | |
| tree | 61095efad35d8de4b0096fb90dfa234c7d19f192 /compiler/rustc_middle/src/ty/context.rs | |
| parent | c97922dca563cb7f9385b18dbf7ca8c97f8e1597 (diff) | |
| download | rust-eb19a8a6208d992d6d4e661be8fa80c1eeab01f6.tar.gz rust-eb19a8a6208d992d6d4e661be8fa80c1eeab01f6.zip | |
Compute `lint_levels` by definition
Diffstat (limited to 'compiler/rustc_middle/src/ty/context.rs')
| -rw-r--r-- | compiler/rustc_middle/src/ty/context.rs | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/compiler/rustc_middle/src/ty/context.rs b/compiler/rustc_middle/src/ty/context.rs index 94eddef944a..4cd9004fa18 100644 --- a/compiler/rustc_middle/src/ty/context.rs +++ b/compiler/rustc_middle/src/ty/context.rs @@ -53,7 +53,7 @@ use rustc_query_system::ich::StableHashingContext; use rustc_serialize::opaque::{FileEncodeResult, FileEncoder}; use rustc_session::config::{CrateType, OutputFilenames}; use rustc_session::cstore::CrateStoreDyn; -use rustc_session::lint::{Level, Lint}; +use rustc_session::lint::{Level, Lint, LintId}; use rustc_session::Limit; use rustc_session::Session; use rustc_span::def_id::{DefPathHash, StableCrateId}; @@ -2832,19 +2832,16 @@ impl<'tcx> TyCtxt<'tcx> { pub fn lint_level_at_node( self, lint: &'static Lint, - mut id: hir::HirId, + id: hir::HirId, ) -> (Level, LintLevelSource) { - let sets = self.lint_levels(()); - loop { - if let Some(pair) = sets.level_and_source(lint, id, self.sess) { - return pair; - } - let next = self.hir().get_parent_node(id); - if next == id { - bug!("lint traversal reached the root of the crate"); - } - id = next; - } + let level_and_src = crate::lint::LintLevelQueryMap::get_lint_level( + LintId::of(lint), + id, + self, + self.lint_levels_on(id), + ); + debug!(?id, ?level_and_src); + level_and_src } /// Emit a lint at `span` from a lint struct (some type that implements `DecorateLint`, |
