diff options
| -rw-r--r-- | compiler/rustc_errors/src/lib.rs | 4 | ||||
| -rw-r--r-- | compiler/rustc_passes/src/dead.rs | 7 | ||||
| -rw-r--r-- | tests/ui/lint/rfc-2383-lint-reason/expect_unused_inside_impl_block.rs | 25 |
3 files changed, 36 insertions, 0 deletions
diff --git a/compiler/rustc_errors/src/lib.rs b/compiler/rustc_errors/src/lib.rs index 3d1639db4af..0449d538709 100644 --- a/compiler/rustc_errors/src/lib.rs +++ b/compiler/rustc_errors/src/lib.rs @@ -1263,6 +1263,10 @@ impl Handler { std::mem::take(&mut self.inner.borrow_mut().fulfilled_expectations) } + pub fn insert_fulfilled_expectation(&self, expectation_id: LintExpectationId) { + self.inner.borrow_mut().fulfilled_expectations.insert(expectation_id); + } + pub fn flush_delayed(&self) { let mut inner = self.inner.lock(); let bugs = std::mem::replace(&mut inner.delayed_span_bugs, Vec::new()); diff --git a/compiler/rustc_passes/src/dead.rs b/compiler/rustc_passes/src/dead.rs index fbe6fc3bee4..39ecc9919d3 100644 --- a/compiler/rustc_passes/src/dead.rs +++ b/compiler/rustc_passes/src/dead.rs @@ -814,6 +814,13 @@ impl<'tcx> DeadVisitor<'tcx> { } }; + for id in &dead_codes[1..] { + let hir = self.tcx.hir().local_def_id_to_hir_id(*id); + let lint_level = self.tcx.lint_level_at_node(lint::builtin::DEAD_CODE, hir).0; + if let Some(expectation_id) = lint_level.get_expectation_id() { + self.tcx.sess.diagnostic().insert_fulfilled_expectation(expectation_id); + } + } self.tcx.emit_spanned_lint( lint, tcx.hir().local_def_id_to_hir_id(first_id), diff --git a/tests/ui/lint/rfc-2383-lint-reason/expect_unused_inside_impl_block.rs b/tests/ui/lint/rfc-2383-lint-reason/expect_unused_inside_impl_block.rs new file mode 100644 index 00000000000..9779596d56e --- /dev/null +++ b/tests/ui/lint/rfc-2383-lint-reason/expect_unused_inside_impl_block.rs @@ -0,0 +1,25 @@ +// check-pass + +#![feature(lint_reasons)] +#![warn(unused)] + +struct OneUnused; +struct TwoUnused; + +impl OneUnused { + #[expect(unused)] + fn unused() {} +} + +impl TwoUnused { + #[expect(unused)] + fn unused1(){} + + #[expect(unused)] + fn unused2(){} +} + +fn main() { + let _ = OneUnused; + let _ = TwoUnused; +} |
