diff --git a/compiler/rustc_lint/src/expect.rs b/compiler/rustc_lint/src/expect.rs index 7611b41b97eac..e6c9d0b0ab000 100644 --- a/compiler/rustc_lint/src/expect.rs +++ b/compiler/rustc_lint/src/expect.rs @@ -1,5 +1,4 @@ use crate::builtin; -use rustc_data_structures::fx::FxHashMap; use rustc_hir::HirId; use rustc_middle::{lint::LintExpectation, ty::TyCtxt}; use rustc_session::lint::LintExpectationId; @@ -11,8 +10,7 @@ pub fn check_expectations(tcx: TyCtxt<'_>) { } let fulfilled_expectations = tcx.sess.diagnostic().steal_fulfilled_expectation_ids(); - let lint_expectations: &FxHashMap = - &tcx.lint_levels(()).lint_expectations; + let lint_expectations = &tcx.lint_levels(()).lint_expectations; for (id, expectation) in lint_expectations { if !fulfilled_expectations.contains(id) { diff --git a/compiler/rustc_lint/src/levels.rs b/compiler/rustc_lint/src/levels.rs index f40abff7fc059..f46f74fa45fb0 100644 --- a/compiler/rustc_lint/src/levels.rs +++ b/compiler/rustc_lint/src/levels.rs @@ -45,7 +45,7 @@ fn lint_levels(tcx: TyCtxt<'_>, (): ()) -> LintLevelMap { pub struct LintLevelsBuilder<'s> { sess: &'s Session, - lint_expectations: FxHashMap, + lint_expectations: Vec<(LintExpectationId, LintExpectation)>, /// Each expectation has a stable and an unstable identifier. This map /// is used to map from unstable to stable [`LintExpectationId`]s. expectation_id_map: FxHashMap, @@ -355,7 +355,7 @@ impl<'s> LintLevelsBuilder<'s> { } if let Level::Expect(expect_id) = level { self.lint_expectations - .insert(expect_id, LintExpectation::new(reason, sp)); + .push((expect_id, LintExpectation::new(reason, sp))); } } @@ -374,7 +374,7 @@ impl<'s> LintLevelsBuilder<'s> { } if let Level::Expect(expect_id) = level { self.lint_expectations - .insert(expect_id, LintExpectation::new(reason, sp)); + .push((expect_id, LintExpectation::new(reason, sp))); } } Err((Some(ids), ref new_lint_name)) => { @@ -414,7 +414,7 @@ impl<'s> LintLevelsBuilder<'s> { } if let Level::Expect(expect_id) = level { self.lint_expectations - .insert(expect_id, LintExpectation::new(reason, sp)); + .push((expect_id, LintExpectation::new(reason, sp))); } } Err((None, _)) => { @@ -511,7 +511,7 @@ impl<'s> LintLevelsBuilder<'s> { } if let Level::Expect(expect_id) = level { self.lint_expectations - .insert(expect_id, LintExpectation::new(reason, sp)); + .push((expect_id, LintExpectation::new(reason, sp))); } } else { panic!("renamed lint does not exist: {}", new_name); diff --git a/compiler/rustc_middle/src/lint.rs b/compiler/rustc_middle/src/lint.rs index cc99e4dfac96d..894947fa70d96 100644 --- a/compiler/rustc_middle/src/lint.rs +++ b/compiler/rustc_middle/src/lint.rs @@ -159,7 +159,7 @@ pub struct LintLevelMap { /// /// The [`LintExpectationId`] is stored as a part of the [`Expect`](Level::Expect) /// lint level. - pub lint_expectations: FxHashMap, + pub lint_expectations: Vec<(LintExpectationId, LintExpectation)>, pub sets: LintLevelSets, pub id_to_set: FxHashMap, } diff --git a/src/test/ui/lint/rfc-2383-lint-reason/expect_multiple_lints.stderr b/src/test/ui/lint/rfc-2383-lint-reason/expect_multiple_lints.stderr index 25299aa7ec2fc..90ee744b26b01 100644 --- a/src/test/ui/lint/rfc-2383-lint-reason/expect_multiple_lints.stderr +++ b/src/test/ui/lint/rfc-2383-lint-reason/expect_multiple_lints.stderr @@ -7,10 +7,10 @@ LL | #[expect(unused_variables, unused_mut, while_true)] = note: `#[warn(unfulfilled_lint_expectations)]` on by default warning: this lint expectation is unfulfilled - --> $DIR/expect_multiple_lints.rs:28:10 + --> $DIR/expect_multiple_lints.rs:10:40 | LL | #[expect(unused_variables, unused_mut, while_true)] - | ^^^^^^^^^^^^^^^^ + | ^^^^^^^^^^ warning: this lint expectation is unfulfilled --> $DIR/expect_multiple_lints.rs:19:10 @@ -19,34 +19,34 @@ LL | #[expect(unused_variables, unused_mut, while_true)] | ^^^^^^^^^^^^^^^^ warning: this lint expectation is unfulfilled - --> $DIR/expect_multiple_lints.rs:28:28 + --> $DIR/expect_multiple_lints.rs:19:40 | LL | #[expect(unused_variables, unused_mut, while_true)] - | ^^^^^^^^^^ + | ^^^^^^^^^^ warning: this lint expectation is unfulfilled - --> $DIR/expect_multiple_lints.rs:36:18 + --> $DIR/expect_multiple_lints.rs:28:10 | -LL | #[expect(unused, while_true)] - | ^^^^^^^^^^ +LL | #[expect(unused_variables, unused_mut, while_true)] + | ^^^^^^^^^^^^^^^^ warning: this lint expectation is unfulfilled - --> $DIR/expect_multiple_lints.rs:19:40 + --> $DIR/expect_multiple_lints.rs:28:28 | LL | #[expect(unused_variables, unused_mut, while_true)] - | ^^^^^^^^^^ + | ^^^^^^^^^^ warning: this lint expectation is unfulfilled - --> $DIR/expect_multiple_lints.rs:45:10 + --> $DIR/expect_multiple_lints.rs:36:18 | LL | #[expect(unused, while_true)] - | ^^^^^^ + | ^^^^^^^^^^ warning: this lint expectation is unfulfilled - --> $DIR/expect_multiple_lints.rs:10:40 + --> $DIR/expect_multiple_lints.rs:45:10 | -LL | #[expect(unused_variables, unused_mut, while_true)] - | ^^^^^^^^^^ +LL | #[expect(unused, while_true)] + | ^^^^^^ warning: 8 warnings emitted diff --git a/src/test/ui/lint/rfc-2383-lint-reason/expect_nested_lint_levels.rs b/src/test/ui/lint/rfc-2383-lint-reason/expect_nested_lint_levels.rs index cad6b836c7a72..8f94bd6ec6cb8 100644 --- a/src/test/ui/lint/rfc-2383-lint-reason/expect_nested_lint_levels.rs +++ b/src/test/ui/lint/rfc-2383-lint-reason/expect_nested_lint_levels.rs @@ -6,6 +6,7 @@ #[expect( unused_mut, //~^ WARNING this lint expectation is unfulfilled [unfulfilled_lint_expectations] + //~| NOTE `#[warn(unfulfilled_lint_expectations)]` on by default //~| NOTE this `expect` is overridden by a `allow` attribute before the `unused_mut` lint is triggered reason = "this `expect` is overridden by a `allow` attribute before the `unused_mut` lint is triggered" )] @@ -22,7 +23,6 @@ mod foo { #[expect( unused_mut, //~^ WARNING this lint expectation is unfulfilled [unfulfilled_lint_expectations] - //~| NOTE `#[warn(unfulfilled_lint_expectations)]` on by default //~| NOTE this `expect` is overridden by a `warn` attribute before the `unused_mut` lint is triggered reason = "this `expect` is overridden by a `warn` attribute before the `unused_mut` lint is triggered" )] diff --git a/src/test/ui/lint/rfc-2383-lint-reason/expect_nested_lint_levels.stderr b/src/test/ui/lint/rfc-2383-lint-reason/expect_nested_lint_levels.stderr index 353cbc341f24a..370e51bf70a7a 100644 --- a/src/test/ui/lint/rfc-2383-lint-reason/expect_nested_lint_levels.stderr +++ b/src/test/ui/lint/rfc-2383-lint-reason/expect_nested_lint_levels.stderr @@ -26,21 +26,21 @@ LL | unused_mut, | ^^^^^^^^^^ warning: this lint expectation is unfulfilled - --> $DIR/expect_nested_lint_levels.rs:23:5 + --> $DIR/expect_nested_lint_levels.rs:7:5 | LL | unused_mut, | ^^^^^^^^^^ | = note: `#[warn(unfulfilled_lint_expectations)]` on by default - = note: this `expect` is overridden by a `warn` attribute before the `unused_mut` lint is triggered + = note: this `expect` is overridden by a `allow` attribute before the `unused_mut` lint is triggered warning: this lint expectation is unfulfilled - --> $DIR/expect_nested_lint_levels.rs:7:5 + --> $DIR/expect_nested_lint_levels.rs:24:5 | LL | unused_mut, | ^^^^^^^^^^ | - = note: this `expect` is overridden by a `allow` attribute before the `unused_mut` lint is triggered + = note: this `expect` is overridden by a `warn` attribute before the `unused_mut` lint is triggered warning: this lint expectation is unfulfilled --> $DIR/expect_nested_lint_levels.rs:43:10