about summary refs log tree commit diff
path: root/compiler/rustc_middle/src/ty/context.rs
diff options
context:
space:
mode:
authorDeadbeef <ent3rm4n@gmail.com>2022-07-22 16:48:36 +0000
committerCamille GILLOT <gillot.camille@gmail.com>2022-09-14 19:02:44 +0200
commiteb19a8a6208d992d6d4e661be8fa80c1eeab01f6 (patch)
tree61095efad35d8de4b0096fb90dfa234c7d19f192 /compiler/rustc_middle/src/ty/context.rs
parentc97922dca563cb7f9385b18dbf7ca8c97f8e1597 (diff)
downloadrust-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.rs23
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`,