diff options
| author | Ryan Levick <me@ryanlevick.com> | 2021-07-01 12:29:20 +0200 |
|---|---|---|
| committer | Ryan Levick <me@ryanlevick.com> | 2021-07-01 12:29:20 +0200 |
| commit | 33cc7b1fe21c82d31204e549cd2471ac8ec22aa3 (patch) | |
| tree | 6f60870bfaaaa7c5377f11f33b0dc9b84d9bda46 /compiler/rustc_middle | |
| parent | a3d6905053ad60e836717976e6e4d38de67888f9 (diff) | |
| download | rust-33cc7b1fe21c82d31204e549cd2471ac8ec22aa3.tar.gz rust-33cc7b1fe21c82d31204e549cd2471ac8ec22aa3.zip | |
New force_warn diagnostic builder and ensure cap-lints doesn't reduce force_warn level
Diffstat (limited to 'compiler/rustc_middle')
| -rw-r--r-- | compiler/rustc_middle/src/lint.rs | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/compiler/rustc_middle/src/lint.rs b/compiler/rustc_middle/src/lint.rs index 71cf5b2249c..b5eab8be17f 100644 --- a/compiler/rustc_middle/src/lint.rs +++ b/compiler/rustc_middle/src/lint.rs @@ -108,8 +108,13 @@ impl LintLevelSets { } } - // Ensure that we never exceed the `--cap-lints` argument. - level = cmp::min(level, self.lint_cap); + // Ensure that we never exceed the `--cap-lints` argument + // unless the source is a --force-warn + level = if let LintLevelSource::CommandLine(_, Level::ForceWarn) = src { + level + } else { + cmp::min(level, self.lint_cap) + }; if let Some(driver_level) = sess.driver_lint_caps.get(&LintId::of(lint)) { // Ensure that we never exceed driver level. @@ -257,22 +262,14 @@ pub fn struct_lint_level<'s, 'd>( } else { sess.struct_allow("") } - } else if is_force_warn { - let mut err = if let Some(span) = span { - sess.struct_span_warn(span, "") - } else { - sess.struct_warn("") - }; - // Ensure force-warn warns even if the diagnostic has - // been canceled for reasons like `--cap-lints` - err.level = rustc_errors::Level::Warning; - err } else { return; } } - (Level::Warn | Level::ForceWarn, Some(span)) => sess.struct_span_warn(span, ""), - (Level::Warn | Level::ForceWarn, None) => sess.struct_warn(""), + (Level::Warn, Some(span)) => sess.struct_span_warn(span, ""), + (Level::Warn, None) => sess.struct_warn(""), + (Level::ForceWarn, Some(span)) => sess.struct_span_force_warn(span, ""), + (Level::ForceWarn, None) => sess.struct_force_warn(""), (Level::Deny | Level::Forbid, Some(span)) => sess.struct_span_err(span, ""), (Level::Deny | Level::Forbid, None) => sess.struct_err(""), }; |
