diff --git a/compiler/rustc_middle/src/lint.rs b/compiler/rustc_middle/src/lint.rs index 7ea059c5d29d..13cdc405a8df 100644 --- a/compiler/rustc_middle/src/lint.rs +++ b/compiler/rustc_middle/src/lint.rs @@ -305,6 +305,18 @@ fn explain_lint_level_source( } } } + + if let Some(warnings_group) = sess + .opts + .lint_opts + .iter() + .find_map(|(opt, level)| (opt == "warnings").then_some(level)) + .copied() + && warnings_group >= Level::Deny + && level < warnings_group + { + err.note_once(format!("the `{name}` lint ignores `-D warnings`")); + } } /// The innermost function for emitting lints implementing the [`trait@Diagnostic`] trait. diff --git a/tests/run-make/linker-warning/deny-warnings.txt b/tests/run-make/linker-warning/deny-warnings.txt index 53137252e119..7a187af46f70 100644 --- a/tests/run-make/linker-warning/deny-warnings.txt +++ b/tests/run-make/linker-warning/deny-warnings.txt @@ -1,6 +1,7 @@ warning: linker stderr: bar | = note: requested on the command line with `-W linker-messages` + = note: the `linker_messages` lint ignores `-D warnings` warning: 1 warning emitted