about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-08-29 17:16:39 -0700
committerEsteban Küber <esteban@kuber.com.ar>2019-10-16 11:57:19 -0700
commit220b9b29c26953ff14eb94be70e9741365783aa3 (patch)
tree3193017dc1d6f22fa814a1f5a62dc18fe71bf1a4
parent91a3db95a1a5939054d72d2ce69c5647c3cfb93b (diff)
downloadrust-220b9b29c26953ff14eb94be70e9741365783aa3.tar.gz
rust-220b9b29c26953ff14eb94be70e9741365783aa3.zip
Move overlapping patterns to its own lint
-rw-r--r--src/libcore/ascii.rs2
-rw-r--r--src/librustc/lint/builtin.rs7
-rw-r--r--src/librustc_lint/lib.rs1
-rw-r--r--src/librustc_mir/hair/pattern/_match.rs2
-rw-r--r--src/test/ui/check_match/issue-43253.rs2
-rw-r--r--src/test/ui/check_match/issue-43253.stderr8
-rw-r--r--src/test/ui/exhaustive_integer_patterns.rs2
-rw-r--r--src/test/ui/exhaustive_integer_patterns.stderr8
-rw-r--r--src/test/ui/match/match-range-fail-dominate.rs2
-rw-r--r--src/test/ui/match/match-range-fail-dominate.stderr12
-rw-r--r--src/test/ui/precise_pointer_size_matching.rs2
-rw-r--r--src/test/ui/precise_pointer_size_matching.stderr6
12 files changed, 40 insertions, 14 deletions
diff --git a/src/libcore/ascii.rs b/src/libcore/ascii.rs
index 0492fbd55fa..04aefd57ca2 100644
--- a/src/libcore/ascii.rs
+++ b/src/libcore/ascii.rs
@@ -101,7 +101,7 @@ pub fn escape_default(c: u8) -> EscapeDefault {
         b'\'' => ([b'\\', b'\'', 0, 0], 2),
         b'"' => ([b'\\', b'"', 0, 0], 2),
         // The three arms above are in the following range
-        #[allow(unreachable_patterns)]
+        #[allow(overlapping_patterns)]
         b'\x20' ..= b'\x7e' => ([c, 0, 0, 0], 1),
         _ => ([b'\\', b'x', hexify(c >> 4), hexify(c & 0xf)], 4),
     };
diff --git a/src/librustc/lint/builtin.rs b/src/librustc/lint/builtin.rs
index 983e3a9922e..4c28f6372fe 100644
--- a/src/librustc/lint/builtin.rs
+++ b/src/librustc/lint/builtin.rs
@@ -81,6 +81,12 @@ declare_lint! {
 }
 
 declare_lint! {
+    pub OVERLAPPING_PATTERNS,
+    Warn,
+    "detects overlapping patterns"
+}
+
+declare_lint! {
     pub UNUSED_MACROS,
     Warn,
     "detects macros that were not used"
@@ -423,6 +429,7 @@ declare_lint_pass! {
         DEAD_CODE,
         UNREACHABLE_CODE,
         UNREACHABLE_PATTERNS,
+        OVERLAPPING_PATTERNS,
         UNUSED_MACROS,
         WARNINGS,
         UNUSED_FEATURES,
diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs
index 0e054013cd7..e3860e229d6 100644
--- a/src/librustc_lint/lib.rs
+++ b/src/librustc_lint/lib.rs
@@ -255,6 +255,7 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
                     UNUSED_MUT,
                     UNREACHABLE_CODE,
                     UNREACHABLE_PATTERNS,
+                    OVERLAPPING_PATTERNS,
                     UNUSED_MUST_USE,
                     UNUSED_UNSAFE,
                     PATH_STATEMENTS,
diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs
index 542f0ba5c9c..1b3c824458e 100644
--- a/src/librustc_mir/hair/pattern/_match.rs
+++ b/src/librustc_mir/hair/pattern/_match.rs
@@ -1741,7 +1741,7 @@ fn split_grouped_constructors<'p, 'tcx>(
 
                 if let (true, Some(hir_id)) = (!overlaps.is_empty(), hir_id) {
                     let mut err = tcx.struct_span_lint_hir(
-                        lint::builtin::UNREACHABLE_PATTERNS,
+                        lint::builtin::OVERLAPPING_PATTERNS,
                         hir_id,
                         ctor_range.span,
                         "multiple patterns covering the same range",
diff --git a/src/test/ui/check_match/issue-43253.rs b/src/test/ui/check_match/issue-43253.rs
index 548300da034..5c6834459f0 100644
--- a/src/test/ui/check_match/issue-43253.rs
+++ b/src/test/ui/check_match/issue-43253.rs
@@ -1,7 +1,7 @@
 // check-pass
-
 #![feature(exclusive_range_pattern)]
 #![warn(unreachable_patterns)]
+#![warn(overlapping_patterns)]
 
 fn main() {
     // These cases should generate no warning.
diff --git a/src/test/ui/check_match/issue-43253.stderr b/src/test/ui/check_match/issue-43253.stderr
index 24dfa52beb6..2f6888c0118 100644
--- a/src/test/ui/check_match/issue-43253.stderr
+++ b/src/test/ui/check_match/issue-43253.stderr
@@ -9,7 +9,7 @@ LL |         9..=10 => {},
 note: lint level defined here
   --> $DIR/issue-43253.rs:4:9
    |
-LL | #![warn(unreachable_patterns)]
+LL | #![warn(overlapping_patterns)]
    |         ^^^^^^^^^^^^^^^^^^^^
 
 warning: unreachable pattern
@@ -17,6 +17,12 @@ warning: unreachable pattern
    |
 LL |         9 => {},
    |         ^
+   |
+note: lint level defined here
+  --> $DIR/issue-43253.rs:3:9
+   |
+LL | #![warn(unreachable_patterns)]
+   |         ^^^^^^^^^^^^^^^^^^^^
 
 warning: multiple patterns covering the same range
   --> $DIR/issue-43253.rs:35:9
diff --git a/src/test/ui/exhaustive_integer_patterns.rs b/src/test/ui/exhaustive_integer_patterns.rs
index ce2b44b8ef1..ef88ce94aa6 100644
--- a/src/test/ui/exhaustive_integer_patterns.rs
+++ b/src/test/ui/exhaustive_integer_patterns.rs
@@ -1,7 +1,7 @@
 #![feature(precise_pointer_size_matching)]
 #![feature(exclusive_range_pattern)]
-
 #![deny(unreachable_patterns)]
+#![deny(overlapping_patterns)]
 
 use std::{char, u8, u16, u32, u64, u128, i8, i16, i32, i64, i128};
 
diff --git a/src/test/ui/exhaustive_integer_patterns.stderr b/src/test/ui/exhaustive_integer_patterns.stderr
index ef3faceaa7e..59cd3fffa8d 100644
--- a/src/test/ui/exhaustive_integer_patterns.stderr
+++ b/src/test/ui/exhaustive_integer_patterns.stderr
@@ -9,7 +9,7 @@ LL |         100 ..= 200 => {}
 note: lint level defined here
   --> $DIR/exhaustive_integer_patterns.rs:4:9
    |
-LL | #![deny(unreachable_patterns)]
+LL | #![deny(overlapping_patterns)]
    |         ^^^^^^^^^^^^^^^^^^^^
 
 error: unreachable pattern
@@ -17,6 +17,12 @@ error: unreachable pattern
    |
 LL |         200 => {}
    |         ^^^
+   |
+note: lint level defined here
+  --> $DIR/exhaustive_integer_patterns.rs:3:9
+   |
+LL | #![deny(unreachable_patterns)]
+   |         ^^^^^^^^^^^^^^^^^^^^
 
 error[E0004]: non-exhaustive patterns: `128u8..=std::u8::MAX` not covered
   --> $DIR/exhaustive_integer_patterns.rs:28:11
diff --git a/src/test/ui/match/match-range-fail-dominate.rs b/src/test/ui/match/match-range-fail-dominate.rs
index 4c0f57ffbee..bdbb1f050a7 100644
--- a/src/test/ui/match/match-range-fail-dominate.rs
+++ b/src/test/ui/match/match-range-fail-dominate.rs
@@ -1,4 +1,4 @@
-#![deny(unreachable_patterns)]
+#![deny(unreachable_patterns, overlapping_patterns)]
 
 fn main() {
     match 5 {
diff --git a/src/test/ui/match/match-range-fail-dominate.stderr b/src/test/ui/match/match-range-fail-dominate.stderr
index af667be317d..b14e9b5008d 100644
--- a/src/test/ui/match/match-range-fail-dominate.stderr
+++ b/src/test/ui/match/match-range-fail-dominate.stderr
@@ -7,10 +7,10 @@ LL |       5 ..= 6 => { }
    |       ^^^^^^^ overlapping patterns
    |
 note: lint level defined here
-  --> $DIR/match-range-fail-dominate.rs:1:9
+  --> $DIR/match-range-fail-dominate.rs:1:31
    |
-LL | #![deny(unreachable_patterns)]
-   |         ^^^^^^^^^^^^^^^^^^^^
+LL | #![deny(unreachable_patterns, overlapping_patterns)]
+   |                               ^^^^^^^^^^^^^^^^^^^^
 
 error: multiple patterns covering the same range
   --> $DIR/match-range-fail-dominate.rs:12:7
@@ -69,6 +69,12 @@ error: unreachable pattern
    |
 LL |       0.02f64 => {}
    |       ^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/match-range-fail-dominate.rs:1:9
+   |
+LL | #![deny(unreachable_patterns, overlapping_patterns)]
+   |         ^^^^^^^^^^^^^^^^^^^^
 
 warning: floating-point types cannot be used in patterns
   --> $DIR/match-range-fail-dominate.rs:29:7
diff --git a/src/test/ui/precise_pointer_size_matching.rs b/src/test/ui/precise_pointer_size_matching.rs
index 239197af2ca..be2a140ddc3 100644
--- a/src/test/ui/precise_pointer_size_matching.rs
+++ b/src/test/ui/precise_pointer_size_matching.rs
@@ -8,7 +8,7 @@
 #![feature(precise_pointer_size_matching)]
 #![feature(exclusive_range_pattern)]
 
-#![deny(unreachable_patterns)]
+#![deny(unreachable_patterns, overlapping_patterns)]
 
 use std::{usize, isize};
 
diff --git a/src/test/ui/precise_pointer_size_matching.stderr b/src/test/ui/precise_pointer_size_matching.stderr
index 06b0e73c5a3..4930047fc1e 100644
--- a/src/test/ui/precise_pointer_size_matching.stderr
+++ b/src/test/ui/precise_pointer_size_matching.stderr
@@ -7,10 +7,10 @@ LL |         -5 ..= 20 => {}
    |         ^^^^^^^^^ overlapping patterns
    |
 note: lint level defined here
-  --> $DIR/precise_pointer_size_matching.rs:11:9
+  --> $DIR/precise_pointer_size_matching.rs:11:31
    |
-LL | #![deny(unreachable_patterns)]
-   |         ^^^^^^^^^^^^^^^^^^^^
+LL | #![deny(unreachable_patterns, overlapping_patterns)]
+   |                               ^^^^^^^^^^^^^^^^^^^^
 
 error[E0004]: non-exhaustive patterns: `std::isize::MIN..=-6isize` and `21isize..=std::isize::MAX` not covered
   --> $DIR/precise_pointer_size_matching.rs:24:11