about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthew Jasper <mjjasper1@gmail.com>2019-12-27 12:03:03 +0000
committerMatthew Jasper <mjjasper1@gmail.com>2020-02-01 22:07:11 +0000
commit425e494fceb2f88bec344ef07d0f2db4c74dd2d1 (patch)
tree389fb2f95b34419d7a19010e9d51fb6776e59b80
parent13db6501c7273cd1997ce20e15106f362e5613c4 (diff)
downloadrust-425e494fceb2f88bec344ef07d0f2db4c74dd2d1.tar.gz
rust-425e494fceb2f88bec344ef07d0f2db4c74dd2d1.zip
Remove or_patterns from INCOMPLETE_FEATURES
-rw-r--r--src/librustc_feature/active.rs1
-rw-r--r--src/test/ui/lint/issue-54538-unused-parens-lint.rs1
-rw-r--r--src/test/ui/lint/issue-54538-unused-parens-lint.stderr58
-rw-r--r--src/test/ui/or-patterns/already-bound-name.rs1
-rw-r--r--src/test/ui/or-patterns/already-bound-name.stderr38
-rw-r--r--src/test/ui/or-patterns/consistent-bindings.rs1
-rw-r--r--src/test/ui/or-patterns/consistent-bindings.stderr10
-rw-r--r--src/test/ui/or-patterns/exhaustiveness-non-exhaustive.rs7
-rw-r--r--src/test/ui/or-patterns/exhaustiveness-non-exhaustive.stderr8
-rw-r--r--src/test/ui/or-patterns/exhaustiveness-pass.rs11
-rw-r--r--src/test/ui/or-patterns/exhaustiveness-pass.stderr2
-rw-r--r--src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.rs22
-rw-r--r--src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.stderr36
-rw-r--r--src/test/ui/or-patterns/feature-gate-const-fn.rs1
-rw-r--r--src/test/ui/or-patterns/feature-gate-const-fn.stderr12
-rw-r--r--src/test/ui/or-patterns/inconsistent-modes.rs2
-rw-r--r--src/test/ui/or-patterns/inconsistent-modes.stderr26
-rw-r--r--src/test/ui/or-patterns/missing-bindings.rs2
-rw-r--r--src/test/ui/or-patterns/missing-bindings.stderr60
-rw-r--r--src/test/ui/or-patterns/multiple-pattern-typo.rs1
-rw-r--r--src/test/ui/or-patterns/multiple-pattern-typo.stderr22
-rw-r--r--src/test/ui/or-patterns/or-patterns-syntactic-fail.rs1
-rw-r--r--src/test/ui/or-patterns/or-patterns-syntactic-fail.stderr40
-rw-r--r--src/test/ui/or-patterns/or-patterns-syntactic-pass.rs2
-rw-r--r--src/test/ui/or-patterns/or-patterns-syntactic-pass.stderr8
-rw-r--r--src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.rs1
-rw-r--r--src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.stderr28
27 files changed, 154 insertions, 248 deletions
diff --git a/src/librustc_feature/active.rs b/src/librustc_feature/active.rs
index f20a57ea61c..0252d88e738 100644
--- a/src/librustc_feature/active.rs
+++ b/src/librustc_feature/active.rs
@@ -556,7 +556,6 @@ pub const INCOMPLETE_FEATURES: &[Symbol] = &[
     sym::impl_trait_in_bindings,
     sym::generic_associated_types,
     sym::const_generics,
-    sym::or_patterns,
     sym::let_chains,
     sym::raw_dylib,
     sym::const_trait_impl,
diff --git a/src/test/ui/lint/issue-54538-unused-parens-lint.rs b/src/test/ui/lint/issue-54538-unused-parens-lint.rs
index 7dcbdd0863c..f3d2d1bb58d 100644
--- a/src/test/ui/lint/issue-54538-unused-parens-lint.rs
+++ b/src/test/ui/lint/issue-54538-unused-parens-lint.rs
@@ -1,7 +1,6 @@
 #![feature(box_patterns, stmt_expr_attributes)]
 
 #![feature(or_patterns)]
-//~^ WARN the feature `or_patterns` is incomplete
 
 #![allow(ellipsis_inclusive_range_patterns)]
 #![allow(unreachable_patterns)]
diff --git a/src/test/ui/lint/issue-54538-unused-parens-lint.stderr b/src/test/ui/lint/issue-54538-unused-parens-lint.stderr
index b6d532c3101..b31ad95b191 100644
--- a/src/test/ui/lint/issue-54538-unused-parens-lint.stderr
+++ b/src/test/ui/lint/issue-54538-unused-parens-lint.stderr
@@ -1,157 +1,149 @@
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/issue-54538-unused-parens-lint.rs:3:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:12:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:11:9
    |
 LL |     let (a) = 0;
    |         ^^^ help: remove these parentheses
    |
 note: the lint level is defined here
-  --> $DIR/issue-54538-unused-parens-lint.rs:9:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:8:9
    |
 LL | #![deny(unused_parens)]
    |         ^^^^^^^^^^^^^
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:13:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:12:9
    |
 LL |     for (a) in 0..1 {}
    |         ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:14:12
+  --> $DIR/issue-54538-unused-parens-lint.rs:13:12
    |
 LL |     if let (a) = 0 {}
    |            ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:15:15
+  --> $DIR/issue-54538-unused-parens-lint.rs:14:15
    |
 LL |     while let (a) = 0 {}
    |               ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:16:12
+  --> $DIR/issue-54538-unused-parens-lint.rs:15:12
    |
 LL |     fn foo((a): u8) {}
    |            ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:17:14
+  --> $DIR/issue-54538-unused-parens-lint.rs:16:14
    |
 LL |     let _ = |(a): u8| 0;
    |              ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:45:12
+  --> $DIR/issue-54538-unused-parens-lint.rs:44:12
    |
 LL |     if let (0 | 1) = 0 {}
    |            ^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:46:13
+  --> $DIR/issue-54538-unused-parens-lint.rs:45:13
    |
 LL |     if let ((0 | 1),) = (0,) {}
    |             ^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:47:13
+  --> $DIR/issue-54538-unused-parens-lint.rs:46:13
    |
 LL |     if let [(0 | 1)] = [0] {}
    |             ^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:48:16
+  --> $DIR/issue-54538-unused-parens-lint.rs:47:16
    |
 LL |     if let 0 | (1 | 2) = 0 {}
    |                ^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:50:15
+  --> $DIR/issue-54538-unused-parens-lint.rs:49:15
    |
 LL |     if let TS((0 | 1)) = TS(0) {}
    |               ^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:52:20
+  --> $DIR/issue-54538-unused-parens-lint.rs:51:20
    |
 LL |     if let NS { f: (0 | 1) } = (NS { f: 0 }) {}
    |                    ^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:62:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:61:9
    |
 LL |         (_) => {}
    |         ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:63:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:62:9
    |
 LL |         (y) => {}
    |         ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:64:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:63:9
    |
 LL |         (ref r) => {}
    |         ^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:65:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:64:9
    |
 LL |         (e @ 1...2) => {}
    |         ^^^^^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:71:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:70:9
    |
 LL |         (e @ &(1...2)) => {}
    |         ^^^^^^^^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:72:10
+  --> $DIR/issue-54538-unused-parens-lint.rs:71:10
    |
 LL |         &(_) => {}
    |          ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:83:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:82:9
    |
 LL |         (_) => {}
    |         ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:84:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:83:9
    |
 LL |         (y) => {}
    |         ^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:85:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:84:9
    |
 LL |         (ref r) => {}
    |         ^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:86:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:85:9
    |
 LL |         (e @ 1..=2) => {}
    |         ^^^^^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:92:9
+  --> $DIR/issue-54538-unused-parens-lint.rs:91:9
    |
 LL |         (e @ &(1..=2)) => {}
    |         ^^^^^^^^^^^^^^ help: remove these parentheses
 
 error: unnecessary parentheses around pattern
-  --> $DIR/issue-54538-unused-parens-lint.rs:93:10
+  --> $DIR/issue-54538-unused-parens-lint.rs:92:10
    |
 LL |         &(_) => {}
    |          ^^^ help: remove these parentheses
diff --git a/src/test/ui/or-patterns/already-bound-name.rs b/src/test/ui/or-patterns/already-bound-name.rs
index 3ebf59c6437..726e17b7ec2 100644
--- a/src/test/ui/or-patterns/already-bound-name.rs
+++ b/src/test/ui/or-patterns/already-bound-name.rs
@@ -2,7 +2,6 @@
 // correctly accounts for or-patterns.
 
 #![feature(or_patterns)]
-//~^ WARN the feature `or_patterns` is incomplete
 
 enum E<T> { A(T, T), B(T) }
 
diff --git a/src/test/ui/or-patterns/already-bound-name.stderr b/src/test/ui/or-patterns/already-bound-name.stderr
index 948c91370d0..9924b0d7f72 100644
--- a/src/test/ui/or-patterns/already-bound-name.stderr
+++ b/src/test/ui/or-patterns/already-bound-name.stderr
@@ -1,97 +1,89 @@
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:12:13
+  --> $DIR/already-bound-name.rs:11:13
    |
 LL |     let (a, a) = (0, 1); // Standard duplication without an or-pattern.
    |             ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:15:15
+  --> $DIR/already-bound-name.rs:14:15
    |
 LL |     let (a, A(a, _) | B(a)) = (0, A(1, 2));
    |               ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:15:25
+  --> $DIR/already-bound-name.rs:14:25
    |
 LL |     let (a, A(a, _) | B(a)) = (0, A(1, 2));
    |                         ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:19:26
+  --> $DIR/already-bound-name.rs:18:26
    |
 LL |     let (A(a, _) | B(a), a) = (A(0, 1), 2);
    |                          ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:22:14
+  --> $DIR/already-bound-name.rs:21:14
    |
 LL |     let A(a, a) | B(a) = A(0, 1);
    |              ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:25:21
+  --> $DIR/already-bound-name.rs:24:21
    |
 LL |     let B(a) | A(a, a) = A(0, 1);
    |                     ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:29:21
+  --> $DIR/already-bound-name.rs:28:21
    |
 LL |         B(a) | A(a, a) => {} // Let's ensure `match` has no funny business.
    |                     ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:33:36
+  --> $DIR/already-bound-name.rs:32:36
    |
 LL |     let B(A(a, _) | B(a)) | A(a, A(a, _) | B(a)) = B(B(1));
    |                                    ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:33:46
+  --> $DIR/already-bound-name.rs:32:46
    |
 LL |     let B(A(a, _) | B(a)) | A(a, A(a, _) | B(a)) = B(B(1));
    |                                              ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:38:36
+  --> $DIR/already-bound-name.rs:37:36
    |
 LL |     let B(_) | A(A(a, _) | B(a), A(a, _) | B(a)) = B(B(1));
    |                                    ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:38:46
+  --> $DIR/already-bound-name.rs:37:46
    |
 LL |     let B(_) | A(A(a, _) | B(a), A(a, _) | B(a)) = B(B(1));
    |                                              ^ used in a pattern more than once
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/already-bound-name.rs:38:9
+  --> $DIR/already-bound-name.rs:37:9
    |
 LL |     let B(_) | A(A(a, _) | B(a), A(a, _) | B(a)) = B(B(1));
    |         ^^^^ pattern doesn't bind `a`        - variable not in all patterns
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:43:49
+  --> $DIR/already-bound-name.rs:42:49
    |
 LL |     let B(A(a, _) | B(a)) | A(A(a, _) | B(a), A(a, _) | B(a)) = B(B(1));
    |                                                 ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/already-bound-name.rs:43:59
+  --> $DIR/already-bound-name.rs:42:59
    |
 LL |     let B(A(a, _) | B(a)) | A(A(a, _) | B(a), A(a, _) | B(a)) = B(B(1));
    |                                                           ^ used in a pattern more than once
 
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/already-bound-name.rs:4:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
 error[E0308]: mismatched types
-  --> $DIR/already-bound-name.rs:33:31
+  --> $DIR/already-bound-name.rs:32:31
    |
 LL |     let B(A(a, _) | B(a)) | A(a, A(a, _) | B(a)) = B(B(1));
    |                               ^                    ------- this expression has type `E<E<{integer}>>`
diff --git a/src/test/ui/or-patterns/consistent-bindings.rs b/src/test/ui/or-patterns/consistent-bindings.rs
index 0eb539dca4c..ec71afed872 100644
--- a/src/test/ui/or-patterns/consistent-bindings.rs
+++ b/src/test/ui/or-patterns/consistent-bindings.rs
@@ -3,7 +3,6 @@
 // edition:2018
 
 #![feature(or_patterns)]
-//~^ WARN the feature `or_patterns` is incomplete
 
 fn main() {
     // One level:
diff --git a/src/test/ui/or-patterns/consistent-bindings.stderr b/src/test/ui/or-patterns/consistent-bindings.stderr
index 433a02dfb31..bb8e90af5f2 100644
--- a/src/test/ui/or-patterns/consistent-bindings.stderr
+++ b/src/test/ui/or-patterns/consistent-bindings.stderr
@@ -1,13 +1,5 @@
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/consistent-bindings.rs:5:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
 error[E0308]: mismatched types
-  --> $DIR/consistent-bindings.rs:44:9
+  --> $DIR/consistent-bindings.rs:43:9
    |
 LL |     let () = 0;
    |         ^^ expected integer, found `()`
diff --git a/src/test/ui/or-patterns/exhaustiveness-non-exhaustive.rs b/src/test/ui/or-patterns/exhaustiveness-non-exhaustive.rs
index 8b0be2e7a66..2e8baf978e2 100644
--- a/src/test/ui/or-patterns/exhaustiveness-non-exhaustive.rs
+++ b/src/test/ui/or-patterns/exhaustiveness-non-exhaustive.rs
@@ -1,14 +1,11 @@
 #![feature(or_patterns)]
-
-#![allow(incomplete_features)]
 #![deny(unreachable_patterns)]
 
 // We wrap patterns in a tuple because top-level or-patterns are special-cased for now.
 fn main() {
     // Get the fatal error out of the way
     match (0u8,) {
-        (0 | _,) => {}
-        //~^ ERROR or-patterns are not fully implemented yet
+        (0 | _,) => {} //~^ ERROR or-patterns are not fully implemented yet
     }
 
     match (0u8, 0u8) {
@@ -17,7 +14,7 @@ fn main() {
     }
     match ((0u8,),) {
         //~^ ERROR non-exhaustive patterns: `((4u8..=std::u8::MAX))`
-        ((0 | 1,) | (2 | 3,),) => {},
+        ((0 | 1,) | (2 | 3,),) => {}
     }
     match (Some(0u8),) {
         //~^ ERROR non-exhaustive patterns: `(Some(2u8..=std::u8::MAX))`
diff --git a/src/test/ui/or-patterns/exhaustiveness-non-exhaustive.stderr b/src/test/ui/or-patterns/exhaustiveness-non-exhaustive.stderr
index e6aa157d278..7fbd846a22f 100644
--- a/src/test/ui/or-patterns/exhaustiveness-non-exhaustive.stderr
+++ b/src/test/ui/or-patterns/exhaustiveness-non-exhaustive.stderr
@@ -1,5 +1,5 @@
 error[E0004]: non-exhaustive patterns: `(2u8..=std::u8::MAX, _)` not covered
-  --> $DIR/exhaustiveness-non-exhaustive.rs:14:11
+  --> $DIR/exhaustiveness-non-exhaustive.rs:13:11
    |
 LL |     match (0u8, 0u8) {
    |           ^^^^^^^^^^ pattern `(2u8..=std::u8::MAX, _)` not covered
@@ -7,7 +7,7 @@ LL |     match (0u8, 0u8) {
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
 error[E0004]: non-exhaustive patterns: `((4u8..=std::u8::MAX))` not covered
-  --> $DIR/exhaustiveness-non-exhaustive.rs:18:11
+  --> $DIR/exhaustiveness-non-exhaustive.rs:17:11
    |
 LL |     match ((0u8,),) {
    |           ^^^^^^^^^ pattern `((4u8..=std::u8::MAX))` not covered
@@ -15,7 +15,7 @@ LL |     match ((0u8,),) {
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
 error[E0004]: non-exhaustive patterns: `(Some(2u8..=std::u8::MAX))` not covered
-  --> $DIR/exhaustiveness-non-exhaustive.rs:22:11
+  --> $DIR/exhaustiveness-non-exhaustive.rs:21:11
    |
 LL |     match (Some(0u8),) {
    |           ^^^^^^^^^^^^ pattern `(Some(2u8..=std::u8::MAX))` not covered
@@ -23,7 +23,7 @@ LL |     match (Some(0u8),) {
    = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
 
 error: or-patterns are not fully implemented yet
-  --> $DIR/exhaustiveness-non-exhaustive.rs:10:10
+  --> $DIR/exhaustiveness-non-exhaustive.rs:9:10
    |
 LL |         (0 | _,) => {}
    |          ^^^^^
diff --git a/src/test/ui/or-patterns/exhaustiveness-pass.rs b/src/test/ui/or-patterns/exhaustiveness-pass.rs
index f0dc3447f31..9b62810d29d 100644
--- a/src/test/ui/or-patterns/exhaustiveness-pass.rs
+++ b/src/test/ui/or-patterns/exhaustiveness-pass.rs
@@ -1,14 +1,11 @@
 #![feature(or_patterns)]
-
-#![allow(incomplete_features)]
 #![deny(unreachable_patterns)]
 
 // We wrap patterns in a tuple because top-level or-patterns are special-cased for now.
 fn main() {
     // Get the fatal error out of the way
     match (0,) {
-        (0 | _,) => {}
-        //~^ ERROR or-patterns are not fully implemented yet
+        (0 | _,) => {} //~^ ERROR or-patterns are not fully implemented yet
     }
 
     match (0,) {
@@ -27,11 +24,11 @@ fn main() {
         (Some(2..=255),) => {}
     }
     match ((0,),) {
-        ((0 | 1,) | (2 | 3,),) => {},
-        ((_,),) => {},
+        ((0 | 1,) | (2 | 3,),) => {}
+        ((_,),) => {}
     }
     match (&[0u8][..],) {
-        ([] | [0 | 1..=255] | [_, ..],) => {},
+        ([] | [0 | 1..=255] | [_, ..],) => {}
     }
 
     match ((0, 0),) {
diff --git a/src/test/ui/or-patterns/exhaustiveness-pass.stderr b/src/test/ui/or-patterns/exhaustiveness-pass.stderr
index 1f4278c4b80..dc5a4186ac7 100644
--- a/src/test/ui/or-patterns/exhaustiveness-pass.stderr
+++ b/src/test/ui/or-patterns/exhaustiveness-pass.stderr
@@ -1,5 +1,5 @@
 error: or-patterns are not fully implemented yet
-  --> $DIR/exhaustiveness-pass.rs:10:10
+  --> $DIR/exhaustiveness-pass.rs:9:10
    |
 LL |         (0 | _,) => {}
    |          ^^^^^
diff --git a/src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.rs b/src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.rs
index 81bc1176f57..dd1c16f5000 100644
--- a/src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.rs
+++ b/src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.rs
@@ -1,14 +1,11 @@
 #![feature(or_patterns)]
-
-#![allow(incomplete_features)]
 #![deny(unreachable_patterns)]
 
 // We wrap patterns in a tuple because top-level or-patterns are special-cased for now.
 fn main() {
     // Get the fatal error out of the way
     match (0u8,) {
-        (0 | _,) => {}
-        //~^ ERROR or-patterns are not fully implemented yet
+        (0 | _,) => {} //~^ ERROR or-patterns are not fully implemented yet
     }
 
     match (0u8,) {
@@ -29,9 +26,9 @@ fn main() {
     }
     match (0u8, 0u8) {
         (1 | 2, 3 | 4) => {}
-        (1, 3) => {} //~ ERROR unreachable pattern
-        (1, 4) => {} //~ ERROR unreachable pattern
-        (2, 4) => {} //~ ERROR unreachable pattern
+        (1, 3) => {}     //~ ERROR unreachable pattern
+        (1, 4) => {}     //~ ERROR unreachable pattern
+        (2, 4) => {}     //~ ERROR unreachable pattern
         (2 | 1, 4) => {} //~ ERROR unreachable pattern
         (1, 5 | 6) => {}
         (1, 4 | 5) => {} //~ ERROR unreachable pattern
@@ -40,18 +37,17 @@ fn main() {
     match (Some(0u8),) {
         (None | Some(1 | 2),) => {}
         (Some(1),) => {} //~ ERROR unreachable pattern
-        (None,) => {} //~ ERROR unreachable pattern
+        (None,) => {}    //~ ERROR unreachable pattern
         _ => {}
     }
     match ((0u8,),) {
-        ((1 | 2,) | (3 | 4,),) => {},
-        ((1..=4,),) => {}, //~ ERROR unreachable pattern
-        _ => {},
+        ((1 | 2,) | (3 | 4,),) => {}
+        ((1..=4,),) => {} //~ ERROR unreachable pattern
+        _ => {}
     }
 
     match (0,) {
-        (1
-         | 1,) => {} //~ ERROR unreachable
+        (1 | 1,) => {} //~ ERROR unreachable
         _ => {}
     }
     match [0; 2] {
diff --git a/src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.stderr b/src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.stderr
index 7f7bb929a0d..1f07c27afad 100644
--- a/src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.stderr
+++ b/src/test/ui/or-patterns/exhaustiveness-unreachable-pattern.stderr
@@ -1,107 +1,107 @@
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:16:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:15:9
    |
 LL |         (1,) => {}
    |         ^^^^
    |
 note: the lint level is defined here
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:4:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:3:9
    |
 LL | #![deny(unreachable_patterns)]
    |         ^^^^^^^^^^^^^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:21:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:20:9
    |
 LL |         (2,) => {}
    |         ^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:27:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:26:9
    |
 LL |         (1 | 2,) => {}
    |         ^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:32:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:31:9
    |
 LL |         (1, 3) => {}
    |         ^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:33:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:32:9
    |
 LL |         (1, 4) => {}
    |         ^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:34:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:33:9
    |
 LL |         (2, 4) => {}
    |         ^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:35:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:34:9
    |
 LL |         (2 | 1, 4) => {}
    |         ^^^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:37:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:36:9
    |
 LL |         (1, 4 | 5) => {}
    |         ^^^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:42:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:41:9
    |
 LL |         (Some(1),) => {}
    |         ^^^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:43:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:42:9
    |
 LL |         (None,) => {}
    |         ^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:48:9
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:47:9
    |
 LL |         ((1..=4,),) => {},
    |         ^^^^^^^^^^^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:54:12
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:53:12
    |
 LL |          | 1,) => {}
    |            ^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:61:15
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:60:15
    |
 LL |             | 0] => {}
    |               ^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:59:15
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:58:15
    |
 LL |             | 0
    |               ^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:69:10
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:68:10
    |
 LL |         [1
    |          ^
 
 error: unreachable pattern
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:75:14
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:74:14
    |
 LL |         Some(0
    |              ^
 
 error: or-patterns are not fully implemented yet
-  --> $DIR/exhaustiveness-unreachable-pattern.rs:10:10
+  --> $DIR/exhaustiveness-unreachable-pattern.rs:9:10
    |
 LL |         (0 | _,) => {}
    |          ^^^^^
diff --git a/src/test/ui/or-patterns/feature-gate-const-fn.rs b/src/test/ui/or-patterns/feature-gate-const-fn.rs
index d73dcf26666..d21cf3dc72c 100644
--- a/src/test/ui/or-patterns/feature-gate-const-fn.rs
+++ b/src/test/ui/or-patterns/feature-gate-const-fn.rs
@@ -1,5 +1,4 @@
 #![feature(or_patterns)]
-#![allow(incomplete_features)]
 
 const fn foo((Ok(a) | Err(a)): Result<i32, i32>) {
     //~^ ERROR or-pattern is not allowed in a `const fn`
diff --git a/src/test/ui/or-patterns/feature-gate-const-fn.stderr b/src/test/ui/or-patterns/feature-gate-const-fn.stderr
index 26143d2f19d..112bc625172 100644
--- a/src/test/ui/or-patterns/feature-gate-const-fn.stderr
+++ b/src/test/ui/or-patterns/feature-gate-const-fn.stderr
@@ -1,5 +1,5 @@
 error[E0658]: or-pattern is not allowed in a `const fn`
-  --> $DIR/feature-gate-const-fn.rs:4:15
+  --> $DIR/feature-gate-const-fn.rs:3:15
    |
 LL | const fn foo((Ok(a) | Err(a)): Result<i32, i32>) {
    |               ^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | const fn foo((Ok(a) | Err(a)): Result<i32, i32>) {
    = help: add `#![feature(const_if_match)]` to the crate attributes to enable
 
 error[E0658]: or-pattern is not allowed in a `const fn`
-  --> $DIR/feature-gate-const-fn.rs:7:9
+  --> $DIR/feature-gate-const-fn.rs:6:9
    |
 LL |     let Ok(y) | Err(y) = x;
    |         ^^^^^^^^^^^^^^
@@ -17,7 +17,7 @@ LL |     let Ok(y) | Err(y) = x;
    = help: add `#![feature(const_if_match)]` to the crate attributes to enable
 
 error[E0658]: or-pattern is not allowed in a `const`
-  --> $DIR/feature-gate-const-fn.rs:13:9
+  --> $DIR/feature-gate-const-fn.rs:12:9
    |
 LL |     let Ok(y) | Err(y) = x;
    |         ^^^^^^^^^^^^^^
@@ -26,7 +26,7 @@ LL |     let Ok(y) | Err(y) = x;
    = help: add `#![feature(const_if_match)]` to the crate attributes to enable
 
 error[E0658]: or-pattern is not allowed in a `static`
-  --> $DIR/feature-gate-const-fn.rs:19:9
+  --> $DIR/feature-gate-const-fn.rs:18:9
    |
 LL |     let Ok(y) | Err(y) = x;
    |         ^^^^^^^^^^^^^^
@@ -35,7 +35,7 @@ LL |     let Ok(y) | Err(y) = x;
    = help: add `#![feature(const_if_match)]` to the crate attributes to enable
 
 error[E0658]: or-pattern is not allowed in a `static mut`
-  --> $DIR/feature-gate-const-fn.rs:25:9
+  --> $DIR/feature-gate-const-fn.rs:24:9
    |
 LL |     let Ok(y) | Err(y) = x;
    |         ^^^^^^^^^^^^^^
@@ -44,7 +44,7 @@ LL |     let Ok(y) | Err(y) = x;
    = help: add `#![feature(const_if_match)]` to the crate attributes to enable
 
 error[E0658]: or-pattern is not allowed in a `const`
-  --> $DIR/feature-gate-const-fn.rs:32:13
+  --> $DIR/feature-gate-const-fn.rs:31:13
    |
 LL |         let Ok(y) | Err(y) = x;
    |             ^^^^^^^^^^^^^^
diff --git a/src/test/ui/or-patterns/inconsistent-modes.rs b/src/test/ui/or-patterns/inconsistent-modes.rs
index 44836893ea2..28b5f0c02fe 100644
--- a/src/test/ui/or-patterns/inconsistent-modes.rs
+++ b/src/test/ui/or-patterns/inconsistent-modes.rs
@@ -1,8 +1,6 @@
 // This test ensures that or patterns require binding mode consistency across arms.
 
 #![feature(or_patterns)]
-//~^ WARN the feature `or_patterns` is incomplete
-
 #![allow(non_camel_case_types)]
 fn main() {
     // One level:
diff --git a/src/test/ui/or-patterns/inconsistent-modes.stderr b/src/test/ui/or-patterns/inconsistent-modes.stderr
index 7c1638ff94d..c329f905960 100644
--- a/src/test/ui/or-patterns/inconsistent-modes.stderr
+++ b/src/test/ui/or-patterns/inconsistent-modes.stderr
@@ -1,5 +1,5 @@
 error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
-  --> $DIR/inconsistent-modes.rs:9:25
+  --> $DIR/inconsistent-modes.rs:7:25
    |
 LL |     let Ok(a) | Err(ref a): Result<&u8, u8> = Ok(&0);
    |            -            ^ bound in different ways
@@ -7,7 +7,7 @@ LL |     let Ok(a) | Err(ref a): Result<&u8, u8> = Ok(&0);
    |            first binding
 
 error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
-  --> $DIR/inconsistent-modes.rs:11:29
+  --> $DIR/inconsistent-modes.rs:9:29
    |
 LL |     let Ok(ref mut a) | Err(a): Result<u8, &mut u8> = Ok(0);
    |                    -        ^ bound in different ways
@@ -15,25 +15,25 @@ LL |     let Ok(ref mut a) | Err(a): Result<u8, &mut u8> = Ok(0);
    |                    first binding
 
 error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
-  --> $DIR/inconsistent-modes.rs:13:33
+  --> $DIR/inconsistent-modes.rs:11:33
    |
 LL |     let Ok(ref a) | Err(ref mut a): Result<&u8, &mut u8> = Ok(&0);
    |                - first binding  ^ bound in different ways
 
 error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
-  --> $DIR/inconsistent-modes.rs:16:39
+  --> $DIR/inconsistent-modes.rs:14:39
    |
 LL |     let Ok((ref a, b)) | Err((ref mut a, ref b)) = Ok((0, &0));
    |                 - first binding       ^ bound in different ways
 
 error[E0409]: variable `b` is bound in inconsistent ways within the same match arm
-  --> $DIR/inconsistent-modes.rs:16:46
+  --> $DIR/inconsistent-modes.rs:14:46
    |
 LL |     let Ok((ref a, b)) | Err((ref mut a, ref b)) = Ok((0, &0));
    |                    - first binding           ^ bound in different ways
 
 error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
-  --> $DIR/inconsistent-modes.rs:22:38
+  --> $DIR/inconsistent-modes.rs:20:38
    |
 LL |     let Ok(Ok(a) | Err(a)) | Err(ref a) = Err(0);
    |                        -             ^ bound in different ways
@@ -41,23 +41,15 @@ LL |     let Ok(Ok(a) | Err(a)) | Err(ref a) = Err(0);
    |                        first binding
 
 error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
-  --> $DIR/inconsistent-modes.rs:26:34
+  --> $DIR/inconsistent-modes.rs:24:34
    |
 LL |     let Ok([ Ok((Ok(ref a) | Err(a),)) | Err(a) ]) | Err(a) = Err(&1);
    |                         -        ^ bound in different ways
    |                         |
    |                         first binding
 
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/inconsistent-modes.rs:3:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
 error[E0308]: mismatched types
-  --> $DIR/inconsistent-modes.rs:13:25
+  --> $DIR/inconsistent-modes.rs:11:25
    |
 LL |     let Ok(ref a) | Err(ref mut a): Result<&u8, &mut u8> = Ok(&0);
    |                         ^^^^^^^^^   -------------------- expected due to this
@@ -68,7 +60,7 @@ LL |     let Ok(ref a) | Err(ref mut a): Result<&u8, &mut u8> = Ok(&0);
               found type `&mut &mut u8`
 
 error[E0308]: mismatched types
-  --> $DIR/inconsistent-modes.rs:16:31
+  --> $DIR/inconsistent-modes.rs:14:31
    |
 LL |     let Ok((ref a, b)) | Err((ref mut a, ref b)) = Ok((0, &0));
    |                               ^^^^^^^^^            ----------- this expression has type `std::result::Result<({integer}, &{integer}), (_, _)>`
diff --git a/src/test/ui/or-patterns/missing-bindings.rs b/src/test/ui/or-patterns/missing-bindings.rs
index b065028e7a5..67cf52fa8c4 100644
--- a/src/test/ui/or-patterns/missing-bindings.rs
+++ b/src/test/ui/or-patterns/missing-bindings.rs
@@ -3,8 +3,6 @@
 // edition:2018
 
 #![feature(or_patterns)]
-//~^ WARN the feature `or_patterns` is incomplete
-
 #![allow(non_camel_case_types)]
 
 fn main() {}
diff --git a/src/test/ui/or-patterns/missing-bindings.stderr b/src/test/ui/or-patterns/missing-bindings.stderr
index c73af7a42ee..57270e44123 100644
--- a/src/test/ui/or-patterns/missing-bindings.stderr
+++ b/src/test/ui/or-patterns/missing-bindings.stderr
@@ -1,5 +1,5 @@
 error[E0408]: variable `beta` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:22:9
+  --> $DIR/missing-bindings.rs:20:9
    |
 LL |     let alpha | beta | charlie = alpha;
    |         ^^^^^   ----   ^^^^^^^ pattern doesn't bind `beta`
@@ -8,7 +8,7 @@ LL |     let alpha | beta | charlie = alpha;
    |         pattern doesn't bind `beta`
 
 error[E0408]: variable `beta` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:24:14
+  --> $DIR/missing-bindings.rs:22:14
    |
 LL |         Some(alpha | beta) => {}
    |              ^^^^^   ---- variable not in all patterns
@@ -16,7 +16,7 @@ LL |         Some(alpha | beta) => {}
    |              pattern doesn't bind `beta`
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:36:19
+  --> $DIR/missing-bindings.rs:34:19
    |
 LL |     let A(a, _) | _ = X;
    |           -       ^ pattern doesn't bind `a`
@@ -24,7 +24,7 @@ LL |     let A(a, _) | _ = X;
    |           variable not in all patterns
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:37:9
+  --> $DIR/missing-bindings.rs:35:9
    |
 LL |     let _ | B(a) = X;
    |         ^     - variable not in all patterns
@@ -32,7 +32,7 @@ LL |     let _ | B(a) = X;
    |         pattern doesn't bind `a`
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:38:9
+  --> $DIR/missing-bindings.rs:36:9
    |
 LL |     let A(..) | B(a) = X;
    |         ^^^^^     - variable not in all patterns
@@ -40,7 +40,7 @@ LL |     let A(..) | B(a) = X;
    |         pattern doesn't bind `a`
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:39:19
+  --> $DIR/missing-bindings.rs:37:19
    |
 LL |     let A(a, _) | B(_) = X;
    |           -       ^^^^ pattern doesn't bind `a`
@@ -48,7 +48,7 @@ LL |     let A(a, _) | B(_) = X;
    |           variable not in all patterns
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:40:19
+  --> $DIR/missing-bindings.rs:38:19
    |
 LL |     let A(_, a) | B(_) = X;
    |              -    ^^^^ pattern doesn't bind `a`
@@ -56,7 +56,7 @@ LL |     let A(_, a) | B(_) = X;
    |              variable not in all patterns
 
 error[E0408]: variable `b` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:41:19
+  --> $DIR/missing-bindings.rs:39:19
    |
 LL |     let A(a, b) | B(a) = X;
    |              -    ^^^^ pattern doesn't bind `b`
@@ -64,7 +64,7 @@ LL |     let A(a, b) | B(a) = X;
    |              variable not in all patterns
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:45:9
+  --> $DIR/missing-bindings.rs:43:9
    |
 LL |     let A(A(..) | B(_), _) | B(a) = Y;
    |         ^^^^^^^^^^^^^^^^^^     - variable not in all patterns
@@ -72,7 +72,7 @@ LL |     let A(A(..) | B(_), _) | B(a) = Y;
    |         pattern doesn't bind `a`
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:46:11
+  --> $DIR/missing-bindings.rs:44:11
    |
 LL |     let A(A(..) | B(a), _) | B(A(a, _) | B(a)) = Y;
    |           ^^^^^     - variable not in all patterns
@@ -80,7 +80,7 @@ LL |     let A(A(..) | B(a), _) | B(A(a, _) | B(a)) = Y;
    |           pattern doesn't bind `a`
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:48:21
+  --> $DIR/missing-bindings.rs:46:21
    |
 LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |             -       ^^^^ pattern doesn't bind `a`
@@ -88,7 +88,7 @@ LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |             variable not in all patterns
 
 error[E0408]: variable `b` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:48:21
+  --> $DIR/missing-bindings.rs:46:21
    |
 LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |                -    ^^^^ pattern doesn't bind `b`
@@ -96,7 +96,7 @@ LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |                variable not in all patterns
 
 error[E0408]: variable `c` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:48:11
+  --> $DIR/missing-bindings.rs:46:11
    |
 LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |           ^^^^^^^     - variable not in all patterns
@@ -104,7 +104,7 @@ LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |           pattern doesn't bind `c`
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:48:32
+  --> $DIR/missing-bindings.rs:46:32
    |
 LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |             -                  ^^^^ pattern doesn't bind `a`
@@ -112,7 +112,7 @@ LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |             variable not in all patterns
 
 error[E0408]: variable `b` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:48:32
+  --> $DIR/missing-bindings.rs:46:32
    |
 LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |                -               ^^^^ pattern doesn't bind `b`
@@ -120,7 +120,7 @@ LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |                variable not in all patterns
 
 error[E0408]: variable `c` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:48:32
+  --> $DIR/missing-bindings.rs:46:32
    |
 LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |                       -        ^^^^ pattern doesn't bind `c`
@@ -128,7 +128,7 @@ LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |                       variable not in all patterns
 
 error[E0408]: variable `d` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:48:32
+  --> $DIR/missing-bindings.rs:46:32
    |
 LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |                           -    ^^^^ pattern doesn't bind `d`
@@ -136,7 +136,7 @@ LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |                           variable not in all patterns
 
 error[E0408]: variable `e` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:48:9
+  --> $DIR/missing-bindings.rs:46:9
    |
 LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |         ^^^^^^^^^^^^^^^^^^^^     - variable not in all patterns
@@ -144,7 +144,7 @@ LL |     let A(A(a, b) | B(c), d) | B(e) = Y;
    |         pattern doesn't bind `e`
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:64:29
+  --> $DIR/missing-bindings.rs:62:29
    |
 LL |                     Ok(a) | Err(_),
    |                        -    ^^^^^^ pattern doesn't bind `a`
@@ -152,7 +152,7 @@ LL |                     Ok(a) | Err(_),
    |                        variable not in all patterns
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:72:21
+  --> $DIR/missing-bindings.rs:70:21
    |
 LL |                     A(_, a) |
    |                          - variable not in all patterns
@@ -160,7 +160,7 @@ LL |                     B(b),
    |                     ^^^^ pattern doesn't bind `a`
 
 error[E0408]: variable `b` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:71:21
+  --> $DIR/missing-bindings.rs:69:21
    |
 LL |                     A(_, a) |
    |                     ^^^^^^^ pattern doesn't bind `b`
@@ -168,7 +168,7 @@ LL |                     B(b),
    |                       - variable not in all patterns
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:75:17
+  --> $DIR/missing-bindings.rs:73:17
    |
 LL |                     A(_, a) |
    |                          - variable not in all patterns
@@ -177,7 +177,7 @@ LL |                 B(_)
    |                 ^^^^ pattern doesn't bind `a`
 
 error[E0408]: variable `b` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:75:17
+  --> $DIR/missing-bindings.rs:73:17
    |
 LL |                     B(b),
    |                       - variable not in all patterns
@@ -186,7 +186,7 @@ LL |                 B(_)
    |                 ^^^^ pattern doesn't bind `b`
 
 error[E0408]: variable `a` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:79:13
+  --> $DIR/missing-bindings.rs:77:13
    |
 LL |                 B(Ok(a) | Err(a))
    |                               - variable not in all patterns
@@ -198,7 +198,7 @@ LL |             V3(c),
    |             ^^^^^ pattern doesn't bind `a`
 
 error[E0408]: variable `b` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:60:13
+  --> $DIR/missing-bindings.rs:58:13
    |
 LL | /             V1(
 LL | |
@@ -216,7 +216,7 @@ LL |               V3(c),
    |               ^^^^^ pattern doesn't bind `b`
 
 error[E0408]: variable `c` is not bound in all patterns
-  --> $DIR/missing-bindings.rs:60:13
+  --> $DIR/missing-bindings.rs:58:13
    |
 LL | /             V1(
 LL | |
@@ -237,14 +237,6 @@ LL | |             ) |
 LL |               V3(c),
    |                  - variable not in all patterns
 
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/missing-bindings.rs:5:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
 error: aborting due to 26 previous errors
 
 For more information about this error, try `rustc --explain E0408`.
diff --git a/src/test/ui/or-patterns/multiple-pattern-typo.rs b/src/test/ui/or-patterns/multiple-pattern-typo.rs
index e308c0adb4e..702c9573741 100644
--- a/src/test/ui/or-patterns/multiple-pattern-typo.rs
+++ b/src/test/ui/or-patterns/multiple-pattern-typo.rs
@@ -1,5 +1,4 @@
 #![feature(or_patterns)]
-//~^ WARN the feature `or_patterns` is incomplete and may cause the compiler to crash
 
 fn main() {
     let x = 3;
diff --git a/src/test/ui/or-patterns/multiple-pattern-typo.stderr b/src/test/ui/or-patterns/multiple-pattern-typo.stderr
index c71c760b1e3..cb32068ec0d 100644
--- a/src/test/ui/or-patterns/multiple-pattern-typo.stderr
+++ b/src/test/ui/or-patterns/multiple-pattern-typo.stderr
@@ -1,5 +1,5 @@
 error: unexpected token `||` after pattern
-  --> $DIR/multiple-pattern-typo.rs:8:15
+  --> $DIR/multiple-pattern-typo.rs:7:15
    |
 LL |         1 | 2 || 3 => (),
    |         -     ^^ help: use a single `|` to separate multiple alternative patterns: `|`
@@ -7,7 +7,7 @@ LL |         1 | 2 || 3 => (),
    |         while parsing this or-pattern starting here
 
 error: unexpected token `||` after pattern
-  --> $DIR/multiple-pattern-typo.rs:13:16
+  --> $DIR/multiple-pattern-typo.rs:12:16
    |
 LL |         (1 | 2 || 3) => (),
    |          -     ^^ help: use a single `|` to separate multiple alternative patterns: `|`
@@ -15,7 +15,7 @@ LL |         (1 | 2 || 3) => (),
    |          while parsing this or-pattern starting here
 
 error: unexpected token `||` after pattern
-  --> $DIR/multiple-pattern-typo.rs:18:16
+  --> $DIR/multiple-pattern-typo.rs:17:16
    |
 LL |         (1 | 2 || 3,) => (),
    |          -     ^^ help: use a single `|` to separate multiple alternative patterns: `|`
@@ -23,7 +23,7 @@ LL |         (1 | 2 || 3,) => (),
    |          while parsing this or-pattern starting here
 
 error: unexpected token `||` after pattern
-  --> $DIR/multiple-pattern-typo.rs:25:18
+  --> $DIR/multiple-pattern-typo.rs:24:18
    |
 LL |         TS(1 | 2 || 3) => (),
    |            -     ^^ help: use a single `|` to separate multiple alternative patterns: `|`
@@ -31,7 +31,7 @@ LL |         TS(1 | 2 || 3) => (),
    |            while parsing this or-pattern starting here
 
 error: unexpected token `||` after pattern
-  --> $DIR/multiple-pattern-typo.rs:32:23
+  --> $DIR/multiple-pattern-typo.rs:31:23
    |
 LL |         NS { f: 1 | 2 || 3 } => (),
    |                 -     ^^ help: use a single `|` to separate multiple alternative patterns: `|`
@@ -39,7 +39,7 @@ LL |         NS { f: 1 | 2 || 3 } => (),
    |                 while parsing this or-pattern starting here
 
 error: unexpected token `||` after pattern
-  --> $DIR/multiple-pattern-typo.rs:37:16
+  --> $DIR/multiple-pattern-typo.rs:36:16
    |
 LL |         [1 | 2 || 3] => (),
    |          -     ^^ help: use a single `|` to separate multiple alternative patterns: `|`
@@ -47,18 +47,10 @@ LL |         [1 | 2 || 3] => (),
    |          while parsing this or-pattern starting here
 
 error: unexpected token `||` after pattern
-  --> $DIR/multiple-pattern-typo.rs:42:9
+  --> $DIR/multiple-pattern-typo.rs:41:9
    |
 LL |         || 1 | 2 | 3 => (),
    |         ^^ help: use a single `|` to separate multiple alternative patterns: `|`
 
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/multiple-pattern-typo.rs:1:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
 error: aborting due to 7 previous errors
 
diff --git a/src/test/ui/or-patterns/or-patterns-syntactic-fail.rs b/src/test/ui/or-patterns/or-patterns-syntactic-fail.rs
index ce6836f30f9..d2322005652 100644
--- a/src/test/ui/or-patterns/or-patterns-syntactic-fail.rs
+++ b/src/test/ui/or-patterns/or-patterns-syntactic-fail.rs
@@ -2,7 +2,6 @@
 // This is not a semantic test. We only test parsing.
 
 #![feature(or_patterns)]
-//~^ WARN the feature `or_patterns` is incomplete and may cause the compiler to crash
 
 fn main() {}
 
diff --git a/src/test/ui/or-patterns/or-patterns-syntactic-fail.stderr b/src/test/ui/or-patterns/or-patterns-syntactic-fail.stderr
index e77d92e8b07..6cbb59dc220 100644
--- a/src/test/ui/or-patterns/or-patterns-syntactic-fail.stderr
+++ b/src/test/ui/or-patterns/or-patterns-syntactic-fail.stderr
@@ -1,53 +1,53 @@
 error: an or-pattern parameter must be wrapped in parenthesis
-  --> $DIR/or-patterns-syntactic-fail.rs:28:13
+  --> $DIR/or-patterns-syntactic-fail.rs:27:13
    |
 LL |     fn fun1(A | B: E) {}
    |             ^^^^^ help: wrap the pattern in parenthesis: `(A | B)`
 
 error: a leading `|` is not allowed in a parameter pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:30:13
+  --> $DIR/or-patterns-syntactic-fail.rs:29:13
    |
 LL |     fn fun2(| A | B: E) {}
    |             ^ help: remove the `|`
 
 error: an or-pattern parameter must be wrapped in parenthesis
-  --> $DIR/or-patterns-syntactic-fail.rs:30:15
+  --> $DIR/or-patterns-syntactic-fail.rs:29:15
    |
 LL |     fn fun2(| A | B: E) {}
    |               ^^^^^ help: wrap the pattern in parenthesis: `(A | B)`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:41:11
+  --> $DIR/or-patterns-syntactic-fail.rs:40:11
    |
 LL |     let ( | A | B) = E::A;
    |           ^ help: remove the `|`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:42:11
+  --> $DIR/or-patterns-syntactic-fail.rs:41:11
    |
 LL |     let ( | A | B,) = (E::B,);
    |           ^ help: remove the `|`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:43:11
+  --> $DIR/or-patterns-syntactic-fail.rs:42:11
    |
 LL |     let [ | A | B ] = [E::A];
    |           ^ help: remove the `|`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:44:13
+  --> $DIR/or-patterns-syntactic-fail.rs:43:13
    |
 LL |     let TS( | A | B );
    |             ^ help: remove the `|`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:45:17
+  --> $DIR/or-patterns-syntactic-fail.rs:44:17
    |
 LL |     let NS { f: | A | B };
    |                 ^ help: remove the `|`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:47:11
+  --> $DIR/or-patterns-syntactic-fail.rs:46:11
    |
 LL |     let ( || A | B) = E::A;
    |           ^^ help: remove the `||`
@@ -55,7 +55,7 @@ LL |     let ( || A | B) = E::A;
    = note: alternatives in or-patterns are separated with `|`, not `||`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:48:11
+  --> $DIR/or-patterns-syntactic-fail.rs:47:11
    |
 LL |     let [ || A | B ] = [E::A];
    |           ^^ help: remove the `||`
@@ -63,7 +63,7 @@ LL |     let [ || A | B ] = [E::A];
    = note: alternatives in or-patterns are separated with `|`, not `||`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:49:13
+  --> $DIR/or-patterns-syntactic-fail.rs:48:13
    |
 LL |     let TS( || A | B );
    |             ^^ help: remove the `||`
@@ -71,7 +71,7 @@ LL |     let TS( || A | B );
    = note: alternatives in or-patterns are separated with `|`, not `||`
 
 error: a leading `|` is only allowed in a top-level pattern
-  --> $DIR/or-patterns-syntactic-fail.rs:50:17
+  --> $DIR/or-patterns-syntactic-fail.rs:49:17
    |
 LL |     let NS { f: || A | B };
    |                 ^^ help: remove the `||`
@@ -79,7 +79,7 @@ LL |     let NS { f: || A | B };
    = note: alternatives in or-patterns are separated with `|`, not `||`
 
 error: no rules expected the token `|`
-  --> $DIR/or-patterns-syntactic-fail.rs:14:15
+  --> $DIR/or-patterns-syntactic-fail.rs:13:15
    |
 LL | macro_rules! accept_pat {
    | ----------------------- when calling this macro
@@ -88,7 +88,7 @@ LL | accept_pat!(p | q);
    |               ^ no rules expected this token in macro call
 
 error: no rules expected the token `|`
-  --> $DIR/or-patterns-syntactic-fail.rs:15:13
+  --> $DIR/or-patterns-syntactic-fail.rs:14:13
    |
 LL | macro_rules! accept_pat {
    | ----------------------- when calling this macro
@@ -96,16 +96,8 @@ LL | macro_rules! accept_pat {
 LL | accept_pat!(| p | q);
    |             ^ no rules expected this token in macro call
 
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/or-patterns-syntactic-fail.rs:4:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
 error[E0369]: no implementation for `E | ()`
-  --> $DIR/or-patterns-syntactic-fail.rs:24:22
+  --> $DIR/or-patterns-syntactic-fail.rs:23:22
    |
 LL |     let _ = |A | B: E| ();
    |                  ----^ -- ()
@@ -115,7 +107,7 @@ LL |     let _ = |A | B: E| ();
    = note: an implementation of `std::ops::BitOr` might be missing for `E`
 
 error[E0308]: mismatched types
-  --> $DIR/or-patterns-syntactic-fail.rs:52:36
+  --> $DIR/or-patterns-syntactic-fail.rs:51:36
    |
 LL |     let recovery_witness: String = 0;
    |                           ------   ^
diff --git a/src/test/ui/or-patterns/or-patterns-syntactic-pass.rs b/src/test/ui/or-patterns/or-patterns-syntactic-pass.rs
index 73c1477c281..5fe72caf9c1 100644
--- a/src/test/ui/or-patterns/or-patterns-syntactic-pass.rs
+++ b/src/test/ui/or-patterns/or-patterns-syntactic-pass.rs
@@ -3,7 +3,7 @@
 
 // check-pass
 
-#![feature(or_patterns)] //~ WARNING the feature `or_patterns` is incomplete
+#![feature(or_patterns)]
 
 fn main() {}
 
diff --git a/src/test/ui/or-patterns/or-patterns-syntactic-pass.stderr b/src/test/ui/or-patterns/or-patterns-syntactic-pass.stderr
deleted file mode 100644
index 3145a2e9f2a..00000000000
--- a/src/test/ui/or-patterns/or-patterns-syntactic-pass.stderr
+++ /dev/null
@@ -1,8 +0,0 @@
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/or-patterns-syntactic-pass.rs:6:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
diff --git a/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.rs b/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.rs
index 89ea2d51819..e8b5b492b77 100644
--- a/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.rs
+++ b/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.rs
@@ -3,7 +3,6 @@
 
 #![feature(bindings_after_at)]
 #![feature(or_patterns)]
-//~^ WARN the feature `or_patterns` is incomplete and may cause the compiler to crash
 
 fn main() {
     fn f(a @ a @ a: ()) {}
diff --git a/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.stderr b/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.stderr
index c568d2a3aa2..cba17d82e93 100644
--- a/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.stderr
+++ b/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.stderr
@@ -1,71 +1,63 @@
 error[E0415]: identifier `a` is bound more than once in this parameter list
-  --> $DIR/pat-at-same-name-both.rs:9:14
+  --> $DIR/pat-at-same-name-both.rs:8:14
    |
 LL |     fn f(a @ a @ a: ()) {}
    |              ^ used as parameter more than once
 
 error[E0415]: identifier `a` is bound more than once in this parameter list
-  --> $DIR/pat-at-same-name-both.rs:9:18
+  --> $DIR/pat-at-same-name-both.rs:8:18
    |
 LL |     fn f(a @ a @ a: ()) {}
    |                  ^ used as parameter more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/pat-at-same-name-both.rs:14:20
+  --> $DIR/pat-at-same-name-both.rs:13:20
    |
 LL |         Ok(a @ b @ a)
    |                    ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/pat-at-same-name-both.rs:16:23
+  --> $DIR/pat-at-same-name-both.rs:15:23
    |
 LL |         | Err(a @ b @ a)
    |                       ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/pat-at-same-name-both.rs:21:13
+  --> $DIR/pat-at-same-name-both.rs:20:13
    |
 LL |     let a @ a @ a = ();
    |             ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/pat-at-same-name-both.rs:21:17
+  --> $DIR/pat-at-same-name-both.rs:20:17
    |
 LL |     let a @ a @ a = ();
    |                 ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/pat-at-same-name-both.rs:24:21
+  --> $DIR/pat-at-same-name-both.rs:23:21
    |
 LL |     let ref a @ ref a = ();
    |                     ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/pat-at-same-name-both.rs:26:29
+  --> $DIR/pat-at-same-name-both.rs:25:29
    |
 LL |     let ref mut a @ ref mut a = ();
    |                             ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/pat-at-same-name-both.rs:29:17
+  --> $DIR/pat-at-same-name-both.rs:28:17
    |
 LL |     let a @ (Ok(a) | Err(a)) = Ok(());
    |                 ^ used in a pattern more than once
 
 error[E0416]: identifier `a` is bound more than once in the same pattern
-  --> $DIR/pat-at-same-name-both.rs:29:26
+  --> $DIR/pat-at-same-name-both.rs:28:26
    |
 LL |     let a @ (Ok(a) | Err(a)) = Ok(());
    |                          ^ used in a pattern more than once
 
-warning: the feature `or_patterns` is incomplete and may cause the compiler to crash
-  --> $DIR/pat-at-same-name-both.rs:5:12
-   |
-LL | #![feature(or_patterns)]
-   |            ^^^^^^^^^^^
-   |
-   = note: `#[warn(incomplete_features)]` on by default
-
 error: aborting due to 10 previous errors
 
 Some errors have detailed explanations: E0415, E0416.