about summary refs log tree commit diff
path: root/compiler/rustc_middle
diff options
context:
space:
mode:
authorRyan Levick <me@ryanlevick.com>2021-07-01 12:29:20 +0200
committerRyan Levick <me@ryanlevick.com>2021-07-01 12:29:20 +0200
commit33cc7b1fe21c82d31204e549cd2471ac8ec22aa3 (patch)
tree6f60870bfaaaa7c5377f11f33b0dc9b84d9bda46 /compiler/rustc_middle
parenta3d6905053ad60e836717976e6e4d38de67888f9 (diff)
downloadrust-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.rs25
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(""),
         };