diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:58 +0000 |
commit | a4b7ed7a42c716ab9f05e351f003d589124fd55d (patch) | |
tree | b620cd3f223850b28716e474e80c58059dca5dd4 /src/test/ui/pattern | |
parent | Adding upstream version 1.67.1+dfsg1. (diff) | |
download | rustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.tar.xz rustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.zip |
Adding upstream version 1.68.2+dfsg1.upstream/1.68.2+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/pattern')
297 files changed, 0 insertions, 14279 deletions
diff --git a/src/test/ui/pattern/auxiliary/declarations-for-tuple-field-count-errors.rs b/src/test/ui/pattern/auxiliary/declarations-for-tuple-field-count-errors.rs deleted file mode 100644 index f7373c453..000000000 --- a/src/test/ui/pattern/auxiliary/declarations-for-tuple-field-count-errors.rs +++ /dev/null @@ -1,20 +0,0 @@ -pub struct Z0; -pub struct Z1(); - -pub struct S(pub u8, pub u8, pub u8); -pub struct M( - pub u8, - pub u8, - pub u8, -); - -pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - -pub enum E2 { - S(u8, u8, u8), - M( - u8, - u8, - u8, - ), -} diff --git a/src/test/ui/pattern/bindings-after-at/bind-by-copy.rs b/src/test/ui/pattern/bindings-after-at/bind-by-copy.rs deleted file mode 100644 index 2b349f0ed..000000000 --- a/src/test/ui/pattern/bindings-after-at/bind-by-copy.rs +++ /dev/null @@ -1,47 +0,0 @@ -// run-pass - -// Test copy - -struct A { a: i32, b: i32 } -struct B { a: i32, b: C } -struct D { a: i32, d: C } -#[derive(Copy,Clone)] -struct C { c: i32 } - -pub fn main() { - match (A {a: 10, b: 20}) { - x@A {a, b: 20} => { assert!(x.a == 10); assert!(a == 10); } - A {b: _b, ..} => { panic!(); } - } - - let mut x@B {b, ..} = B {a: 10, b: C {c: 20}}; - assert_eq!(x.a, 10); - x.b.c = 30; - assert_eq!(b.c, 20); - let mut y@D {d, ..} = D {a: 10, d: C {c: 20}}; - assert_eq!(y.a, 10); - y.d.c = 30; - assert_eq!(d.c, 20); - - let some_b = Some(B { a: 10, b: C { c: 20 } }); - - // in irrefutable pattern - if let Some(x @ B { b, .. }) = some_b { - assert_eq!(x.b.c, 20); - assert_eq!(b.c, 20); - } else { - unreachable!(); - } - - let some_b = Some(B { a: 10, b: C { c: 20 } }); - - if let Some(x @ B { b: mut b @ C { c }, .. }) = some_b { - assert_eq!(x.b.c, 20); - assert_eq!(b.c, 20); - b.c = 30; - assert_eq!(b.c, 30); - assert_eq!(c, 20); - } else { - unreachable!(); - } -} diff --git a/src/test/ui/pattern/bindings-after-at/bind-by-move-neither-can-live-while-the-other-survives-1.rs b/src/test/ui/pattern/bindings-after-at/bind-by-move-neither-can-live-while-the-other-survives-1.rs deleted file mode 100644 index 9d1f08d6e..000000000 --- a/src/test/ui/pattern/bindings-after-at/bind-by-move-neither-can-live-while-the-other-survives-1.rs +++ /dev/null @@ -1,37 +0,0 @@ -// This test is taken directly from #16053. -// It checks that you cannot use an AND-pattern (`binding @ pat`) -// where one side is by-ref and the other is by-move. - -struct X { - x: (), -} - -fn main() { - let x = Some(X { x: () }); - match x { - Some(ref _y @ _z) => {} //~ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - None => panic!(), - } - - let x = Some(X { x: () }); - match x { - Some(_z @ ref _y) => {} - //~^ ERROR borrow of moved value - None => panic!(), - } - - let mut x = Some(X { x: () }); - match x { - Some(ref mut _y @ _z) => {} //~ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - None => panic!(), - } - - let mut x = Some(X { x: () }); - match x { - Some(_z @ ref mut _y) => {} - //~^ ERROR borrow of moved value - None => panic!(), - } -} diff --git a/src/test/ui/pattern/bindings-after-at/bind-by-move-neither-can-live-while-the-other-survives-1.stderr b/src/test/ui/pattern/bindings-after-at/bind-by-move-neither-can-live-while-the-other-survives-1.stderr deleted file mode 100644 index c8b45fd24..000000000 --- a/src/test/ui/pattern/bindings-after-at/bind-by-move-neither-can-live-while-the-other-survives-1.stderr +++ /dev/null @@ -1,79 +0,0 @@ -error: cannot move out of value because it is borrowed - --> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:12:14 - | -LL | Some(ref _y @ _z) => {} - | ------^^^-- - | | | - | | value moved into `_z` here - | value borrowed, by `_y`, here - -error: borrow of moved value - --> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:19:14 - | -LL | Some(_z @ ref _y) => {} - | --^^^------ - | | | - | | value borrowed here after move - | value moved into `_z` here - | move occurs because `_z` has type `X` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | Some(ref _z @ ref _y) => {} - | +++ - -error: cannot move out of value because it is borrowed - --> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:26:14 - | -LL | Some(ref mut _y @ _z) => {} - | ----------^^^-- - | | | - | | value moved into `_z` here - | value borrowed, by `_y`, here - -error: borrow of moved value - --> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:33:14 - | -LL | Some(_z @ ref mut _y) => {} - | --^^^---------- - | | | - | | value borrowed here after move - | value moved into `_z` here - | move occurs because `_z` has type `X` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | Some(ref _z @ ref mut _y) => {} - | +++ - -error[E0382]: borrow of moved value - --> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:12:14 - | -LL | Some(ref _y @ _z) => {} - | ^^^^^^ -- value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `X`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | Some(ref _y @ ref _z) => {} - | +++ - -error[E0382]: borrow of moved value - --> $DIR/bind-by-move-neither-can-live-while-the-other-survives-1.rs:26:14 - | -LL | Some(ref mut _y @ _z) => {} - | ^^^^^^^^^^ -- value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `X`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | Some(ref mut _y @ ref _z) => {} - | +++ - -error: aborting due to 6 previous errors - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/bind-by-move-no-subbindings-fun-param.rs b/src/test/ui/pattern/bindings-after-at/bind-by-move-no-subbindings-fun-param.rs deleted file mode 100644 index 1816a74a0..000000000 --- a/src/test/ui/pattern/bindings-after-at/bind-by-move-no-subbindings-fun-param.rs +++ /dev/null @@ -1,11 +0,0 @@ -// See issue #12534. - -fn main() {} - -struct A(Box<u8>); - -fn f(a @ A(u): A) -> Box<u8> { - //~^ ERROR use of partially moved value - drop(a); - u -} diff --git a/src/test/ui/pattern/bindings-after-at/bind-by-move-no-subbindings-fun-param.stderr b/src/test/ui/pattern/bindings-after-at/bind-by-move-no-subbindings-fun-param.stderr deleted file mode 100644 index a481ca468..000000000 --- a/src/test/ui/pattern/bindings-after-at/bind-by-move-no-subbindings-fun-param.stderr +++ /dev/null @@ -1,13 +0,0 @@ -error[E0382]: use of partially moved value - --> $DIR/bind-by-move-no-subbindings-fun-param.rs:7:6 - | -LL | fn f(a @ A(u): A) -> Box<u8> { - | ^ - value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `Box<u8>`, which does not implement the `Copy` trait - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-move-and-move.rs b/src/test/ui/pattern/bindings-after-at/borrowck-move-and-move.rs deleted file mode 100644 index a61d68215..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-move-and-move.rs +++ /dev/null @@ -1,31 +0,0 @@ -// Test that moving on both sides of an `@` pattern is not allowed. - -fn main() { - struct U; // Not copy! - - // Prevent promotion: - fn u() -> U { - U - } - - let a @ b = U; //~ ERROR use of moved value - - let a @ (b, c) = (U, U); //~ ERROR use of partially moved value - - let a @ (b, c) = (u(), u()); //~ ERROR use of partially moved value - - match Ok(U) { - a @ Ok(b) | a @ Err(b) => {} //~ ERROR use of moved value - //~^ ERROR use of moved value - } - - fn fun(a @ b: U) {} //~ ERROR use of moved value - - match [u(), u(), u(), u()] { - xs @ [a, .., b] => {} //~ ERROR use of partially moved value - } - - match [u(), u(), u(), u()] { - xs @ [_, ys @ .., _] => {} //~ ERROR use of partially moved value - } -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-move-and-move.stderr b/src/test/ui/pattern/bindings-after-at/borrowck-move-and-move.stderr deleted file mode 100644 index 324897151..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-move-and-move.stderr +++ /dev/null @@ -1,112 +0,0 @@ -error[E0382]: use of moved value - --> $DIR/borrowck-move-and-move.rs:11:9 - | -LL | let a @ b = U; - | ^ - - move occurs because value has type `U`, which does not implement the `Copy` trait - | | | - | | value moved here - | value used here after move - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ ref b = U; - | +++ +++ - -error[E0382]: use of partially moved value - --> $DIR/borrowck-move-and-move.rs:13:9 - | -LL | let a @ (b, c) = (U, U); - | ^ - value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (b, ref c) = (U, U); - | +++ +++ - -error[E0382]: use of partially moved value - --> $DIR/borrowck-move-and-move.rs:15:9 - | -LL | let a @ (b, c) = (u(), u()); - | ^ - value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (b, ref c) = (u(), u()); - | +++ +++ - -error[E0382]: use of moved value - --> $DIR/borrowck-move-and-move.rs:18:16 - | -LL | match Ok(U) { - | ----- move occurs because value has type `Result<U, U>`, which does not implement the `Copy` trait -LL | a @ Ok(b) | a @ Err(b) => {} - | - ^ value used here after move - | | - | value moved here - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Ok(b) | a @ Err(b) => {} - | +++ - -error[E0382]: use of moved value - --> $DIR/borrowck-move-and-move.rs:18:29 - | -LL | match Ok(U) { - | ----- move occurs because value has type `Result<U, U>`, which does not implement the `Copy` trait -LL | a @ Ok(b) | a @ Err(b) => {} - | - ^ value used here after move - | | - | value moved here - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | a @ Ok(b) | ref a @ Err(b) => {} - | +++ - -error[E0382]: use of partially moved value - --> $DIR/borrowck-move-and-move.rs:25:9 - | -LL | xs @ [a, .., b] => {} - | ^^ - value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref xs @ [a, .., ref b] => {} - | +++ +++ - -error[E0382]: use of partially moved value - --> $DIR/borrowck-move-and-move.rs:29:9 - | -LL | xs @ [_, ys @ .., _] => {} - | ^^ -- value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref xs @ [_, ref ys @ .., _] => {} - | +++ +++ - -error[E0382]: use of moved value - --> $DIR/borrowck-move-and-move.rs:22:12 - | -LL | fn fun(a @ b: U) {} - | ^ - value moved here - | | - | value used here after move - | move occurs because value has type `U`, which does not implement the `Copy` trait - -error: aborting due to 8 previous errors - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box-pass.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box-pass.rs deleted file mode 100644 index fbdefd9d3..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box-pass.rs +++ /dev/null @@ -1,84 +0,0 @@ -// check-pass - -// Test `@` patterns combined with `box` patterns. - -#![feature(box_patterns)] - -#[derive(Copy, Clone)] -struct C; - -fn c() -> C { C } - -struct NC; - -fn nc() -> NC { NC } - -fn main() { - let ref a @ box b = Box::new(C); // OK; the type is `Copy`. - drop(b); - drop(b); - drop(a); - - let ref a @ box b = Box::new(c()); // OK; the type is `Copy`. - drop(b); - drop(b); - drop(a); - - fn f3(ref a @ box b: Box<C>) { // OK; the type is `Copy`. - drop(b); - drop(b); - drop(a); - } - match Box::new(c()) { - ref a @ box b => { // OK; the type is `Copy`. - drop(b); - drop(b); - drop(a); - } - } - - let ref a @ box ref b = Box::new(NC); // OK. - drop(a); - drop(b); - - fn f4(ref a @ box ref b: Box<NC>) { // OK. - drop(a); - drop(b) - } - - match Box::new(nc()) { - ref a @ box ref b => { // OK. - drop(a); - drop(b); - } - } - - match Box::new([Ok(c()), Err(nc()), Ok(c())]) { - box [Ok(a), ref xs @ .., Err(ref b)] => { - let _: C = a; - let _: &[Result<C, NC>; 1] = xs; - let _: &NC = b; - } - _ => {} - } - - match [Ok(Box::new(c())), Err(Box::new(nc())), Ok(Box::new(c())), Ok(Box::new(c()))] { - [Ok(box a), ref xs @ .., Err(box ref b), Err(box ref c)] => { - let _: C = a; - let _: &[Result<Box<C>, Box<NC>>; 1] = xs; - let _: &NC = b; - let _: &NC = c; - } - _ => {} - } - - match Box::new([Ok(c()), Err(nc()), Ok(c())]) { - box [Ok(a), ref xs @ .., Err(b)] => {} - _ => {} - } - - match [Ok(Box::new(c())), Err(Box::new(nc())), Ok(Box::new(c())), Ok(Box::new(c()))] { - [Ok(box ref a), ref xs @ .., Err(box b), Err(box ref mut c)] => {} - _ => {} - } -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box.rs deleted file mode 100644 index 45aa65e67..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box.rs +++ /dev/null @@ -1,69 +0,0 @@ -// Test `@` patterns combined with `box` patterns. - -#![feature(box_patterns)] - -#[derive(Copy, Clone)] -struct C; - -fn c() -> C { - C -} - -struct NC; - -fn nc() -> NC { - NC -} - -fn main() { - let a @ box &b = Box::new(&C); - - let a @ box b = Box::new(C); - - fn f1(a @ box &b: Box<&C>) {} - - fn f2(a @ box b: Box<C>) {} - - match Box::new(C) { - a @ box b => {} - } - - let ref a @ box b = Box::new(NC); //~ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - - let ref a @ box ref mut b = Box::new(nc()); - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - let ref a @ box ref mut b = Box::new(NC); - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - let ref a @ box ref mut b = Box::new(NC); - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - *b = NC; - let ref a @ box ref mut b = Box::new(NC); - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - *b = NC; - drop(a); - - let ref mut a @ box ref b = Box::new(NC); - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - *a = Box::new(NC); - drop(b); - - fn f5(ref mut a @ box ref b: Box<NC>) { - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - *a = Box::new(NC); - drop(b); - } - - match Box::new(nc()) { - ref mut a @ box ref b => { - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - *a = Box::new(NC); - drop(b); - } - } -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box.stderr b/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box.stderr deleted file mode 100644 index f27df32cc..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-at-and-box.stderr +++ /dev/null @@ -1,145 +0,0 @@ -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-at-and-box.rs:31:9 - | -LL | let ref a @ box b = Box::new(NC); - | -----^^^^^^^- - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-at-and-box.rs:34:9 - | -LL | let ref a @ box ref mut b = Box::new(nc()); - | -----^^^^^^^--------- - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-at-and-box.rs:36:9 - | -LL | let ref a @ box ref mut b = Box::new(NC); - | -----^^^^^^^--------- - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-at-and-box.rs:38:9 - | -LL | let ref a @ box ref mut b = Box::new(NC); - | -----^^^^^^^--------- - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-at-and-box.rs:42:9 - | -LL | let ref a @ box ref mut b = Box::new(NC); - | -----^^^^^^^--------- - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-at-and-box.rs:48:9 - | -LL | let ref mut a @ box ref b = Box::new(NC); - | ---------^^^^^^^----- - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-at-and-box.rs:62:9 - | -LL | ref mut a @ box ref b => { - | ---------^^^^^^^----- - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-at-and-box.rs:54:11 - | -LL | fn f5(ref mut a @ box ref b: Box<NC>) { - | ---------^^^^^^^----- - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-at-and-box.rs:31:9 - | -LL | let ref a @ box b = Box::new(NC); - | ^^^^^ - value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `NC`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ box ref b = Box::new(NC); - | +++ - -error[E0502]: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-at-and-box.rs:38:9 - | -LL | let ref a @ box ref mut b = Box::new(NC); - | ^^^^^ --------- mutable borrow occurs here - | | - | immutable borrow occurs here -... -LL | *b = NC; - | ------- mutable borrow later used here - -error[E0502]: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-at-and-box.rs:42:9 - | -LL | let ref a @ box ref mut b = Box::new(NC); - | ^^^^^ --------- mutable borrow occurs here - | | - | immutable borrow occurs here -... -LL | *b = NC; - | ------- mutable borrow later used here - -error[E0502]: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-at-and-box.rs:48:9 - | -LL | let ref mut a @ box ref b = Box::new(NC); - | ^^^^^^^^^ ----- immutable borrow occurs here - | | - | mutable borrow occurs here -... -LL | drop(b); - | - immutable borrow later used here - -error[E0502]: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-at-and-box.rs:62:9 - | -LL | ref mut a @ box ref b => { - | ^^^^^^^^^ ----- immutable borrow occurs here - | | - | mutable borrow occurs here -... -LL | drop(b); - | - immutable borrow later used here - -error[E0502]: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-at-and-box.rs:54:11 - | -LL | fn f5(ref mut a @ box ref b: Box<NC>) { - | ^^^^^^^^^ ----- immutable borrow occurs here - | | - | mutable borrow occurs here -... -LL | drop(b); - | - immutable borrow later used here - -error: aborting due to 14 previous errors - -Some errors have detailed explanations: E0382, E0502. -For more information about an error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-copy-bindings-in-at.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-copy-bindings-in-at.rs deleted file mode 100644 index 0108861cf..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-copy-bindings-in-at.rs +++ /dev/null @@ -1,49 +0,0 @@ -// check-pass - -// Test `Copy` bindings in the rhs of `@` patterns. - -#[derive(Copy, Clone)] -struct C; - -fn mk_c() -> C { C } - -#[derive(Copy, Clone)] -struct P<A, B>(A, B); - -enum E<A, B> { L(A), R(B) } - -fn main() { - let a @ b @ c @ d = C; - let a @ (b, c) = (C, mk_c()); - let a @ P(b, P(c, d)) = P(mk_c(), P(C, C)); - let a @ [b, c] = [C, C]; - let a @ [b, .., c] = [C, mk_c(), C]; - let a @ [b, mid @ .., c] = [C, mk_c(), C]; - let a @ &(b, c) = &(C, C); - let a @ &(b, &P(c, d)) = &(mk_c(), &P(C, C)); - - fn foo(a @ [b, mid @ .., c]: [C; 3]) {} - - use self::E::*; - match L(C) { - L(a) | R(a) => { - let a: C = a; - drop(a); - drop(a); - } - } - match R(&L(&mk_c())) { - L(L(&a)) | L(R(&a)) | R(L(&a)) | R(R(&a)) => { - let a: C = a; - drop(a); - drop(a); - } - } - - match Ok(mk_c()) { - Ok(ref a @ b) | Err(b @ ref a) => { - let _: &C = a; - let _: C = b; - } - } -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse-promotion.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse-promotion.rs deleted file mode 100644 index 82f16fca6..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse-promotion.rs +++ /dev/null @@ -1,7 +0,0 @@ -// Test that `by_move_binding @ pat_with_by_ref_bindings` is prevented even with promotion. -// Currently this logic exists in THIR match checking as opposed to borrowck. - -fn main() { - struct U; - let a @ ref b = U; //~ ERROR borrow of moved value -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse-promotion.stderr b/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse-promotion.stderr deleted file mode 100644 index d6474f1b4..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse-promotion.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse-promotion.rs:6:9 - | -LL | let a @ ref b = U; - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ ref b = U; - | +++ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse.rs deleted file mode 100644 index 06dc6e1c4..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Test that `by_move_binding @ pat_with_by_ref_bindings` is prevented. - -fn main() { - struct U; - - // Prevent promotion. - fn u() -> U { - U - } - - fn f1(a @ ref b: U) {} - //~^ ERROR borrow of moved value - - fn f2(mut a @ (b @ ref c, mut d @ ref e): (U, U)) {} - //~^ ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR use of partially moved value - fn f3(a @ [ref mut b, ref c]: [U; 2]) {} - //~^ ERROR borrow of moved value - - let a @ ref b = U; - //~^ ERROR borrow of moved value - let a @ (mut b @ ref mut c, d @ ref e) = (U, U); - //~^ ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR use of partially moved value - let a @ [ref mut b, ref c] = [U, U]; - //~^ ERROR borrow of moved value - let a @ ref b = u(); - //~^ ERROR borrow of moved value - let a @ (mut b @ ref mut c, d @ ref e) = (u(), u()); - //~^ ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR use of partially moved value - let a @ [ref mut b, ref c] = [u(), u()]; - //~^ ERROR borrow of moved value - - match Some(U) { - a @ Some(ref b) => {} - //~^ ERROR borrow of moved value - None => {} - } - match Some((U, U)) { - a @ Some((mut b @ ref mut c, d @ ref e)) => {} - //~^ ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR use of moved value - None => {} - } - match Some([U, U]) { - mut a @ Some([ref b, ref mut c]) => {} - //~^ ERROR borrow of moved value - //~| ERROR borrow of moved value - None => {} - } - match Some(u()) { - a @ Some(ref b) => {} - //~^ ERROR borrow of moved value - //~| ERROR borrow of moved value - None => {} - } - match Some((u(), u())) { - a @ Some((mut b @ ref mut c, d @ ref e)) => {} - //~^ ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR borrow of moved value - //~| ERROR use of moved value - None => {} - } - match Some([u(), u()]) { - mut a @ Some([ref b, ref mut c]) => {} - //~^ ERROR borrow of moved value - //~| ERROR borrow of moved value - None => {} - } -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse.stderr b/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse.stderr deleted file mode 100644 index 389e86e64..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref-inverse.stderr +++ /dev/null @@ -1,487 +0,0 @@ -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:22:9 - | -LL | let a @ ref b = U; - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ ref b = U; - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:24:9 - | -LL | let a @ (mut b @ ref mut c, d @ ref e) = (U, U); - | -^^^^^^^^^^^^---------^^^^^^-----^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `(U, U)` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (mut b @ ref mut c, d @ ref e) = (U, U); - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:24:14 - | -LL | let a @ (mut b @ ref mut c, d @ ref e) = (U, U); - | -----^^^--------- - | | | - | | value borrowed here after move - | value moved into `b` here - | move occurs because `b` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let a @ (ref mut b @ ref mut c, d @ ref e) = (U, U); - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:24:33 - | -LL | let a @ (mut b @ ref mut c, d @ ref e) = (U, U); - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `d` here - | move occurs because `d` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let a @ (mut b @ ref mut c, ref d @ ref e) = (U, U); - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:29:9 - | -LL | let a @ [ref mut b, ref c] = [U, U]; - | -^^^^---------^^-----^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `[U; 2]` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ [ref mut b, ref c] = [U, U]; - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:31:9 - | -LL | let a @ ref b = u(); - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ ref b = u(); - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:33:9 - | -LL | let a @ (mut b @ ref mut c, d @ ref e) = (u(), u()); - | -^^^^^^^^^^^^---------^^^^^^-----^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `(U, U)` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (mut b @ ref mut c, d @ ref e) = (u(), u()); - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:33:14 - | -LL | let a @ (mut b @ ref mut c, d @ ref e) = (u(), u()); - | -----^^^--------- - | | | - | | value borrowed here after move - | value moved into `b` here - | move occurs because `b` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let a @ (ref mut b @ ref mut c, d @ ref e) = (u(), u()); - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:33:33 - | -LL | let a @ (mut b @ ref mut c, d @ ref e) = (u(), u()); - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `d` here - | move occurs because `d` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let a @ (mut b @ ref mut c, ref d @ ref e) = (u(), u()); - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:38:9 - | -LL | let a @ [ref mut b, ref c] = [u(), u()]; - | -^^^^---------^^-----^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `[U; 2]` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ [ref mut b, ref c] = [u(), u()]; - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:42:9 - | -LL | a @ Some(ref b) => {} - | -^^^^^^^^-----^ - | | | - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `Option<U>` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some(ref b) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:47:9 - | -LL | a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | -^^^^^^^^^^^^^^^^^---------^^^^^^-----^^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `Option<(U, U)>` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:47:19 - | -LL | a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | -----^^^--------- - | | | - | | value borrowed here after move - | value moved into `b` here - | move occurs because `b` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | a @ Some((ref mut b @ ref mut c, d @ ref e)) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:47:38 - | -LL | a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `d` here - | move occurs because `d` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | a @ Some((mut b @ ref mut c, ref d @ ref e)) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:55:9 - | -LL | mut a @ Some([ref b, ref mut c]) => {} - | -----^^^^^^^^^-----^^---------^^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `Option<[U; 2]>` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref mut a @ Some([ref b, ref mut c]) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:61:9 - | -LL | a @ Some(ref b) => {} - | -^^^^^^^^-----^ - | | | - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `Option<U>` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some(ref b) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:67:9 - | -LL | a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | -^^^^^^^^^^^^^^^^^---------^^^^^^-----^^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `Option<(U, U)>` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:67:19 - | -LL | a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | -----^^^--------- - | | | - | | value borrowed here after move - | value moved into `b` here - | move occurs because `b` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | a @ Some((ref mut b @ ref mut c, d @ ref e)) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:67:38 - | -LL | a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `d` here - | move occurs because `d` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | a @ Some((mut b @ ref mut c, ref d @ ref e)) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:75:9 - | -LL | mut a @ Some([ref b, ref mut c]) => {} - | -----^^^^^^^^^-----^^---------^^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `Option<[U; 2]>` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref mut a @ Some([ref b, ref mut c]) => {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:11:11 - | -LL | fn f1(a @ ref b: U) {} - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | fn f1(ref a @ ref b: U) {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:14:11 - | -LL | fn f2(mut a @ (b @ ref c, mut d @ ref e): (U, U)) {} - | -----^^^^^^^^-----^^^^^^^^^^-----^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `(U, U)` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | fn f2(ref mut a @ (b @ ref c, mut d @ ref e): (U, U)) {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:14:20 - | -LL | fn f2(mut a @ (b @ ref c, mut d @ ref e): (U, U)) {} - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `b` here - | move occurs because `b` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | fn f2(mut a @ (ref b @ ref c, mut d @ ref e): (U, U)) {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:14:31 - | -LL | fn f2(mut a @ (b @ ref c, mut d @ ref e): (U, U)) {} - | -----^^^----- - | | | - | | value borrowed here after move - | value moved into `d` here - | move occurs because `d` has type `U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | fn f2(mut a @ (b @ ref c, ref mut d @ ref e): (U, U)) {} - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:19:11 - | -LL | fn f3(a @ [ref mut b, ref c]: [U; 2]) {} - | -^^^^---------^^-----^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `[U; 2]` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | fn f3(ref a @ [ref mut b, ref c]: [U; 2]) {} - | +++ - -error[E0382]: use of partially moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:24:9 - | -LL | let a @ (mut b @ ref mut c, d @ ref e) = (U, U); - | ^ - value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (mut b @ ref mut c, ref d @ ref e) = (U, U); - | +++ +++ - -error[E0382]: use of partially moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:33:9 - | -LL | let a @ (mut b @ ref mut c, d @ ref e) = (u(), u()); - | ^ - value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (mut b @ ref mut c, ref d @ ref e) = (u(), u()); - | +++ +++ - -error[E0382]: use of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:47:38 - | -LL | match Some((U, U)) { - | ------------ move occurs because value has type `Option<(U, U)>`, which does not implement the `Copy` trait -LL | a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | - value moved here ^ value used here after move - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | +++ - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:55:30 - | -LL | match Some([U, U]) { - | ------------ move occurs because value has type `Option<[U; 2]>`, which does not implement the `Copy` trait -LL | mut a @ Some([ref b, ref mut c]) => {} - | ----- ^^^^^^^^^ value borrowed here after move - | | - | value moved here - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:61:18 - | -LL | match Some(u()) { - | --------- move occurs because value has type `Option<U>`, which does not implement the `Copy` trait -LL | a @ Some(ref b) => {} - | - ^^^^^ value borrowed here after move - | | - | value moved here - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some(ref b) => {} - | +++ - -error[E0382]: use of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:67:38 - | -LL | match Some((u(), u())) { - | ---------------- move occurs because value has type `Option<(U, U)>`, which does not implement the `Copy` trait -LL | a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | - value moved here ^ value used here after move - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some((mut b @ ref mut c, d @ ref e)) => {} - | +++ - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:75:30 - | -LL | match Some([u(), u()]) { - | ---------------- move occurs because value has type `Option<[U; 2]>`, which does not implement the `Copy` trait -LL | mut a @ Some([ref b, ref mut c]) => {} - | ----- ^^^^^^^^^ value borrowed here after move - | | - | value moved here - -error[E0382]: use of partially moved value - --> $DIR/borrowck-pat-by-move-and-ref-inverse.rs:14:11 - | -LL | fn f2(mut a @ (b @ ref c, mut d @ ref e): (U, U)) {} - | ^^^^^ ----- value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait - -error: aborting due to 33 previous errors - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref.rs deleted file mode 100644 index 0b0a78010..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref.rs +++ /dev/null @@ -1,82 +0,0 @@ -// Test that `ref mut? @ pat_with_by_move_bindings` is prevented. - -fn main() { - struct U; - - // Prevent promotion. - fn u() -> U { - U - } - - fn f1(ref a @ b: U) {} - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - fn f2(ref a @ (ref b @ mut c, ref d @ e): (U, U)) {} - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - //~| ERROR borrow of moved value - fn f3(ref mut a @ [b, mut c]: [U; 2]) {} - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of partially moved value - - let ref a @ b = U; - //~^ ERROR cannot move out of value because it is borrowed - let ref a @ (ref b @ mut c, ref d @ e) = (U, U); - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - let ref mut a @ [b, mut c] = [U, U]; - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of partially moved value - let ref a @ b = u(); - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - let ref a @ (ref b @ mut c, ref d @ e) = (u(), u()); - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - //~| ERROR borrow of moved value - let ref mut a @ [b, mut c] = [u(), u()]; - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of partially moved value - - match Some(U) { - ref a @ Some(b) => {} - //~^ ERROR cannot move out of value because it is borrowed - None => {} - } - match Some((U, U)) { - ref a @ Some((ref b @ mut c, ref d @ e)) => {} - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - None => {} - } - match Some([U, U]) { - ref mut a @ Some([b, mut c]) => {} - //~^ ERROR cannot move out of value because it is borrowed - None => {} - } - match Some(u()) { - ref a @ Some(b) => {} - //~^ ERROR cannot move out of value because it is borrowed - None => {} - } - match Some((u(), u())) { - ref a @ Some((ref b @ mut c, ref d @ e)) => {} - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - //~| ERROR borrow of moved value - None => {} - } - match Some([u(), u()]) { - ref mut a @ Some([b, mut c]) => {} - //~^ ERROR cannot move out of value because it is borrowed - None => {} - } -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref.stderr b/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref.stderr deleted file mode 100644 index 770bb8953..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-by-move-and-ref.stderr +++ /dev/null @@ -1,375 +0,0 @@ -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:24:9 - | -LL | let ref a @ b = U; - | -----^^^- - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:26:9 - | -LL | let ref a @ (ref b @ mut c, ref d @ e) = (U, U); - | -----^^^^^^^^^^^^-----^^^^^^^^^^-^ - | | | | - | | | value moved into `e` here - | | value moved into `c` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:26:18 - | -LL | let ref a @ (ref b @ mut c, ref d @ e) = (U, U); - | -----^^^----- - | | | - | | value moved into `c` here - | value borrowed, by `b`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:26:33 - | -LL | let ref a @ (ref b @ mut c, ref d @ e) = (U, U); - | -----^^^- - | | | - | | value moved into `e` here - | value borrowed, by `d`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:30:9 - | -LL | let ref mut a @ [b, mut c] = [U, U]; - | ---------^^^^-^^-----^ - | | | | - | | | value moved into `c` here - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:33:9 - | -LL | let ref a @ b = u(); - | -----^^^- - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:36:9 - | -LL | let ref a @ (ref b @ mut c, ref d @ e) = (u(), u()); - | -----^^^^^^^^^^^^-----^^^^^^^^^^-^ - | | | | - | | | value moved into `e` here - | | value moved into `c` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:36:18 - | -LL | let ref a @ (ref b @ mut c, ref d @ e) = (u(), u()); - | -----^^^----- - | | | - | | value moved into `c` here - | value borrowed, by `b`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:36:33 - | -LL | let ref a @ (ref b @ mut c, ref d @ e) = (u(), u()); - | -----^^^- - | | | - | | value moved into `e` here - | value borrowed, by `d`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:42:9 - | -LL | let ref mut a @ [b, mut c] = [u(), u()]; - | ---------^^^^-^^-----^ - | | | | - | | | value moved into `c` here - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:47:9 - | -LL | ref a @ Some(b) => {} - | -----^^^^^^^^-^ - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:52:9 - | -LL | ref a @ Some((ref b @ mut c, ref d @ e)) => {} - | -----^^^^^^^^^^^^^^^^^-----^^^^^^^^^^-^^ - | | | | - | | | value moved into `e` here - | | value moved into `c` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:52:23 - | -LL | ref a @ Some((ref b @ mut c, ref d @ e)) => {} - | -----^^^----- - | | | - | | value moved into `c` here - | value borrowed, by `b`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:52:38 - | -LL | ref a @ Some((ref b @ mut c, ref d @ e)) => {} - | -----^^^- - | | | - | | value moved into `e` here - | value borrowed, by `d`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:59:9 - | -LL | ref mut a @ Some([b, mut c]) => {} - | ---------^^^^^^^^^-^^-----^^ - | | | | - | | | value moved into `c` here - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:64:9 - | -LL | ref a @ Some(b) => {} - | -----^^^^^^^^-^ - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:69:9 - | -LL | ref a @ Some((ref b @ mut c, ref d @ e)) => {} - | -----^^^^^^^^^^^^^^^^^-----^^^^^^^^^^-^^ - | | | | - | | | value moved into `e` here - | | value moved into `c` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:69:23 - | -LL | ref a @ Some((ref b @ mut c, ref d @ e)) => {} - | -----^^^----- - | | | - | | value moved into `c` here - | value borrowed, by `b`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:69:38 - | -LL | ref a @ Some((ref b @ mut c, ref d @ e)) => {} - | -----^^^- - | | | - | | value moved into `e` here - | value borrowed, by `d`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:78:9 - | -LL | ref mut a @ Some([b, mut c]) => {} - | ---------^^^^^^^^^-^^-----^^ - | | | | - | | | value moved into `c` here - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:11:11 - | -LL | fn f1(ref a @ b: U) {} - | -----^^^- - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:14:11 - | -LL | fn f2(ref a @ (ref b @ mut c, ref d @ e): (U, U)) {} - | -----^^^^^^^^^^^^-----^^^^^^^^^^-^ - | | | | - | | | value moved into `e` here - | | value moved into `c` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:14:20 - | -LL | fn f2(ref a @ (ref b @ mut c, ref d @ e): (U, U)) {} - | -----^^^----- - | | | - | | value moved into `c` here - | value borrowed, by `b`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:14:35 - | -LL | fn f2(ref a @ (ref b @ mut c, ref d @ e): (U, U)) {} - | -----^^^- - | | | - | | value moved into `e` here - | value borrowed, by `d`, here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-by-move-and-ref.rs:20:11 - | -LL | fn f3(ref mut a @ [b, mut c]: [U; 2]) {} - | ---------^^^^-^^-----^ - | | | | - | | | value moved into `c` here - | | value moved into `b` here - | value borrowed, by `a`, here - -error[E0382]: borrow of partially moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:30:9 - | -LL | let ref mut a @ [b, mut c] = [U, U]; - | ^^^^^^^^^ ----- value partially moved here - | | - | value borrowed here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref mut a @ [b, ref mut c] = [U, U]; - | +++ - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:33:9 - | -LL | let ref a @ b = u(); - | ^^^^^ - --- move occurs because value has type `U`, which does not implement the `Copy` trait - | | | - | | value moved here - | value borrowed here after move - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ ref b = u(); - | +++ - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:36:18 - | -LL | let ref a @ (ref b @ mut c, ref d @ e) = (u(), u()); - | ^^^^^ ----- value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (ref b @ ref mut c, ref d @ e) = (u(), u()); - | +++ - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:36:33 - | -LL | let ref a @ (ref b @ mut c, ref d @ e) = (u(), u()); - | ^^^^^ - value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (ref b @ mut c, ref d @ ref e) = (u(), u()); - | +++ - -error[E0382]: borrow of partially moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:42:9 - | -LL | let ref mut a @ [b, mut c] = [u(), u()]; - | ^^^^^^^^^ ----- value partially moved here - | | - | value borrowed here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref mut a @ [b, ref mut c] = [u(), u()]; - | +++ - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:69:23 - | -LL | ref a @ Some((ref b @ mut c, ref d @ e)) => {} - | ^^^^^ ----- value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some((ref b @ ref mut c, ref d @ e)) => {} - | +++ - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:69:38 - | -LL | ref a @ Some((ref b @ mut c, ref d @ e)) => {} - | ^^^^^ - value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | ref a @ Some((ref b @ mut c, ref d @ ref e)) => {} - | +++ - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:11:11 - | -LL | fn f1(ref a @ b: U) {} - | ^^^^^ - value moved here - | | - | value borrowed here after move - | move occurs because value has type `U`, which does not implement the `Copy` trait - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:14:20 - | -LL | fn f2(ref a @ (ref b @ mut c, ref d @ e): (U, U)) {} - | ^^^^^ ----- value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `U`, which does not implement the `Copy` trait - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:14:35 - | -LL | fn f2(ref a @ (ref b @ mut c, ref d @ e): (U, U)) {} - | ^^^^^ - value moved here - | | - | value borrowed here after move - | - = note: move occurs because value has type `U`, which does not implement the `Copy` trait - -error[E0382]: borrow of partially moved value - --> $DIR/borrowck-pat-by-move-and-ref.rs:20:11 - | -LL | fn f3(ref mut a @ [b, mut c]: [U; 2]) {} - | ^^^^^^^^^ ----- value partially moved here - | | - | value borrowed here after partial move - | - = note: partial move occurs because value has type `U`, which does not implement the `Copy` trait - -error: aborting due to 36 previous errors - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-both-sides.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-both-sides.rs deleted file mode 100644 index df213f688..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-both-sides.rs +++ /dev/null @@ -1,45 +0,0 @@ -// check-pass - -// Test that `ref` patterns may be used on both sides -// of an `@` pattern according to NLL borrowck. - -fn main() { - struct U; // Not copy! - - // Promotion: - let ref a @ ref b = U; - let _: &U = a; - let _: &U = b; - - // Prevent promotion: - fn u() -> U { U } - - let ref a @ ref b = u(); - let _: &U = a; - let _: &U = b; - - let ref a @ (ref b, [ref c, ref d]) = (u(), [u(), u()]); - let _: &(U, [U; 2]) = a; - let _: &U = b; - let _: &U = c; - let _: &U = d; - - fn f1(ref a @ (ref b, [ref c, ref mid @ .., ref d]): (U, [U; 4])) {} - - let a @ (b, [c, d]) = &(u(), [u(), u()]); - let _: &(U, [U; 2]) = a; - let _: &U = b; - let _: &U = c; - let _: &U = d; - - let ref a @ &ref b = &u(); - let _: &&U = a; - let _: &U = b; - - match Ok(u()) { - ref a @ Ok(ref b) | ref a @ Err(ref b) => { - let _: &Result<U, U> = a; - let _: &U = b; - } - } -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-and-ref.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-and-ref.rs deleted file mode 100644 index 6bc0d346c..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-and-ref.rs +++ /dev/null @@ -1,136 +0,0 @@ -enum Option<T> { - None, - Some(T), -} - -fn main() { - match &mut Some(1) { - ref mut z @ &mut Some(ref a) => { - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - **z = None; - println!("{}", *a); - } - _ => () - } - - struct U; - - // Prevent promotion: - fn u() -> U { U } - - fn f1(ref a @ ref mut b: U) {} - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - fn f2(ref mut a @ ref b: U) {} - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - fn f3(ref a @ [ref b, ref mut mid @ .., ref c]: [U; 4]) {} - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - fn f4_also_moved(ref a @ ref mut b @ c: U) {} - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - - let ref mut a @ (ref b @ ref mut c) = u(); // sub-in-sub - //~^ ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - - let ref a @ ref mut b = U; - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - let ref mut a @ ref b = U; - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - let ref a @ (ref mut b, ref mut c) = (U, U); - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - let ref mut a @ (ref b, ref c) = (U, U); - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - - let ref mut a @ ref b = u(); - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - *a = u(); - drop(b); - let ref a @ ref mut b = u(); - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - *b = u(); - drop(a); - - let ref mut a @ ref b = U; - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - *a = U; - drop(b); - let ref a @ ref mut b = U; - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - *b = U; - drop(a); - - match Ok(U) { - ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) => { - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - *a = Err(U); - drop(b); - } - } - - match Ok(U) { - ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) => { - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - *b = U; - drop(a); - } - } - - match Ok(U) { - ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { *b = U; false } => {} - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot assign to `*b`, as it is immutable for the pattern guard - _ => {} - } - match Ok(U) { - ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { *a = Err(U); false } => {} - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot assign to `*a`, as it is immutable for the pattern guard - _ => {} - } - match Ok(U) { - ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { drop(b); false } => {} - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot move out of `b` in pattern guard - //~| ERROR cannot move out of `b` in pattern guard - _ => {} - } - match Ok(U) { - ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { drop(a); false } => {} - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - //~| ERROR cannot move out of `a` in pattern guard - //~| ERROR cannot move out of `a` in pattern guard - _ => {} - } - - let ref a @ (ref mut b, ref mut c) = (U, U); - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - *b = U; - *c = U; - - let ref a @ (ref mut b, ref mut c) = (U, U); - //~^ ERROR cannot borrow value as mutable because it is also borrowed as immutable - //~| ERROR cannot borrow value as immutable because it is also borrowed as mutable - *b = U; - drop(a); - - let ref a @ (ref mut b, ref mut c) = (U, U); - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable - *b = U; //~| ERROR cannot borrow value as mutable because it is also borrowed as immutable - *c = U; - drop(a); - let ref mut a @ (ref b, ref c) = (U, U); - //~^ ERROR cannot borrow value as immutable because it is also borrowed as mutable -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-and-ref.stderr b/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-and-ref.stderr deleted file mode 100644 index 8546b4bb4..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-and-ref.stderr +++ /dev/null @@ -1,445 +0,0 @@ -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:8:9 - | -LL | ref mut z @ &mut Some(ref a) => { - | ---------^^^^^^^^^^^^^-----^ - | | | - | | immutable borrow, by `a`, occurs here - | mutable borrow, by `z`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:33:9 - | -LL | let ref mut a @ (ref b @ ref mut c) = u(); // sub-in-sub - | ---------^^^^-----------------^ - | | | | - | | | another mutable borrow, by `c`, occurs here - | | also borrowed as immutable, by `b`, here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:33:22 - | -LL | let ref mut a @ (ref b @ ref mut c) = u(); // sub-in-sub - | -----^^^--------- - | | | - | | mutable borrow, by `c`, occurs here - | immutable borrow, by `b`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:37:9 - | -LL | let ref a @ ref mut b = U; - | -----^^^--------- - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:39:9 - | -LL | let ref mut a @ ref b = U; - | ---------^^^----- - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:41:9 - | -LL | let ref a @ (ref mut b, ref mut c) = (U, U); - | -----^^^^---------^^---------^ - | | | | - | | | mutable borrow, by `c`, occurs here - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:43:9 - | -LL | let ref mut a @ (ref b, ref c) = (U, U); - | ---------^^^^-----^^-----^ - | | | | - | | | immutable borrow, by `c`, occurs here - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:46:9 - | -LL | let ref mut a @ ref b = u(); - | ---------^^^----- - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:51:9 - | -LL | let ref a @ ref mut b = u(); - | -----^^^--------- - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:57:9 - | -LL | let ref mut a @ ref b = U; - | ---------^^^----- - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:61:9 - | -LL | let ref a @ ref mut b = U; - | -----^^^--------- - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:67:9 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) => { - | ---------^^^^^^-----^ - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:67:33 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) => { - | ---------^^^^^^^-----^ - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:76:9 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) => { - | -----^^^^^^---------^ - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:76:33 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) => { - | -----^^^^^^^---------^ - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:87:9 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { *b = U; false } => {} - | -----^^^^^^---------^ - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:87:33 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { *b = U; false } => {} - | -----^^^^^^^---------^ - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:94:9 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { *a = Err(U); false } => {} - | ---------^^^^^^-----^ - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:94:33 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { *a = Err(U); false } => {} - | ---------^^^^^^^-----^ - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:101:9 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { drop(b); false } => {} - | -----^^^^^^---------^ - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:101:33 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { drop(b); false } => {} - | -----^^^^^^^---------^ - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:109:9 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { drop(a); false } => {} - | ---------^^^^^^-----^ - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:109:33 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { drop(a); false } => {} - | ---------^^^^^^^-----^ - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:117:9 - | -LL | let ref a @ (ref mut b, ref mut c) = (U, U); - | -----^^^^---------^^---------^ - | | | | - | | | mutable borrow, by `c`, occurs here - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:123:9 - | -LL | let ref a @ (ref mut b, ref mut c) = (U, U); - | -----^^^^---------^^---------^ - | | | | - | | | mutable borrow, by `c`, occurs here - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:129:9 - | -LL | let ref a @ (ref mut b, ref mut c) = (U, U); - | -----^^^^---------^^---------^ - | | | | - | | | mutable borrow, by `c`, occurs here - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:134:9 - | -LL | let ref mut a @ (ref b, ref c) = (U, U); - | ---------^^^^-----^^-----^ - | | | | - | | | immutable borrow, by `c`, occurs here - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:22:11 - | -LL | fn f1(ref a @ ref mut b: U) {} - | -----^^^--------- - | | | - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:24:11 - | -LL | fn f2(ref mut a @ ref b: U) {} - | ---------^^^----- - | | | - | | immutable borrow, by `b`, occurs here - | mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:26:11 - | -LL | fn f3(ref a @ [ref b, ref mut mid @ .., ref c]: [U; 4]) {} - | -----^^^^^^^^^^^----------------^^^^^^^^ - | | | - | | mutable borrow, by `mid`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:28:22 - | -LL | fn f4_also_moved(ref a @ ref mut b @ c: U) {} - | -----^^^------------- - | | | | - | | | also moved into `c` here - | | mutable borrow, by `b`, occurs here - | immutable borrow, by `a`, occurs here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:28:30 - | -LL | fn f4_also_moved(ref a @ ref mut b @ c: U) {} - | ---------^^^- - | | | - | | value moved into `c` here - | value borrowed, by `b`, here - -error[E0502]: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:8:31 - | -LL | ref mut z @ &mut Some(ref a) => { - | --------- ^^^^^ immutable borrow occurs here - | | - | mutable borrow occurs here -... -LL | **z = None; - | ---------- mutable borrow later used here - -error[E0502]: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:46:9 - | -LL | let ref mut a @ ref b = u(); - | ^^^^^^^^^ ----- immutable borrow occurs here - | | - | mutable borrow occurs here -... -LL | drop(b); - | - immutable borrow later used here - -error[E0502]: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:51:9 - | -LL | let ref a @ ref mut b = u(); - | ^^^^^ --------- mutable borrow occurs here - | | - | immutable borrow occurs here -... -LL | *b = u(); - | -------- mutable borrow later used here - -error[E0502]: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:76:20 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) => { - | ----- ^^^^^^^^^ mutable borrow occurs here - | | - | immutable borrow occurs here -... -LL | drop(a); - | - immutable borrow later used here - -error[E0502]: cannot borrow value as mutable because it is also borrowed as immutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:76:45 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) => { - | ----- ^^^^^^^^^ mutable borrow occurs here - | | - | immutable borrow occurs here -... -LL | drop(a); - | - immutable borrow later used here - -error[E0594]: cannot assign to `*b`, as it is immutable for the pattern guard - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:87:61 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { *b = U; false } => {} - | ^^^^^^ cannot assign - | - = note: variables bound in patterns are immutable until the end of the pattern guard - -error[E0594]: cannot assign to `*a`, as it is immutable for the pattern guard - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:94:61 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { *a = Err(U); false } => {} - | ^^^^^^^^^^^ cannot assign - | - = note: variables bound in patterns are immutable until the end of the pattern guard - -error[E0507]: cannot move out of `b` in pattern guard - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:101:66 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { drop(b); false } => {} - | ^ move occurs because `b` has type `&mut U`, which does not implement the `Copy` trait - | - = note: variables bound in patterns cannot be moved from until after the end of the pattern guard - -error[E0507]: cannot move out of `b` in pattern guard - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:101:66 - | -LL | ref a @ Ok(ref mut b) | ref a @ Err(ref mut b) if { drop(b); false } => {} - | ^ move occurs because `b` has type `&mut U`, which does not implement the `Copy` trait - | - = note: variables bound in patterns cannot be moved from until after the end of the pattern guard - -error[E0507]: cannot move out of `a` in pattern guard - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:109:66 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { drop(a); false } => {} - | ^ move occurs because `a` has type `&mut Result<U, U>`, which does not implement the `Copy` trait - | - = note: variables bound in patterns cannot be moved from until after the end of the pattern guard - -error[E0507]: cannot move out of `a` in pattern guard - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:109:66 - | -LL | ref mut a @ Ok(ref b) | ref mut a @ Err(ref b) if { drop(a); false } => {} - | ^ move occurs because `a` has type `&mut Result<U, U>`, which does not implement the `Copy` trait - | - = note: variables bound in patterns cannot be moved from until after the end of the pattern guard - -error[E0502]: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:117:9 - | -LL | let ref a @ (ref mut b, ref mut c) = (U, U); - | ^^^^^ --------- mutable borrow occurs here - | | - | immutable borrow occurs here -... -LL | *b = U; - | ------ mutable borrow later used here - -error[E0502]: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:123:9 - | -LL | let ref a @ (ref mut b, ref mut c) = (U, U); - | ^^^^^ --------- mutable borrow occurs here - | | - | immutable borrow occurs here -... -LL | *b = U; - | ------ mutable borrow later used here - -error[E0502]: cannot borrow value as immutable because it is also borrowed as mutable - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:129:9 - | -LL | let ref a @ (ref mut b, ref mut c) = (U, U); - | ^^^^^ --------- mutable borrow occurs here - | | - | immutable borrow occurs here -LL | -LL | *b = U; - | ------ mutable borrow later used here - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-ref-mut-and-ref.rs:28:30 - | -LL | fn f4_also_moved(ref a @ ref mut b @ c: U) {} - | ----- ^^^^^^^^^ - value moved here - | | | - | | value borrowed here after move - | move occurs because value has type `U`, which does not implement the `Copy` trait - -error: aborting due to 47 previous errors - -Some errors have detailed explanations: E0382, E0502, E0507, E0594. -For more information about an error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-twice.rs b/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-twice.rs deleted file mode 100644 index 99739c7bc..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-twice.rs +++ /dev/null @@ -1,109 +0,0 @@ -// Test that `ref mut x @ ref mut y` and varieties of that are not allowed. - -fn main() { - struct U; - - fn u() -> U { U } - - fn f1(ref mut a @ ref mut b: U) {} - //~^ ERROR cannot borrow value as mutable more than once at a time - fn f2(ref mut a @ ref mut b: U) {} - //~^ ERROR cannot borrow value as mutable more than once at a time - fn f3( - ref mut a @ [ - //~^ ERROR cannot borrow value as mutable more than once at a time - [ref b @ .., _], - [_, ref mut mid @ ..], - .., - [..], - ] : [[U; 4]; 5] - ) {} - fn f4_also_moved(ref mut a @ ref mut b @ c: U) {} - //~^ ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - - let ref mut a @ ref mut b = U; - //~^ ERROR cannot borrow value as mutable more than once at a time - drop(a); - let ref mut a @ ref mut b = U; - //~^ ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - drop(b); - let ref mut a @ ref mut b = U; - //~^ ERROR cannot borrow value as mutable more than once at a time - - let ref mut a @ ref mut b = U; - //~^ ERROR cannot borrow value as mutable more than once at a time - *a = U; - let ref mut a @ ref mut b = U; - //~^ ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - *b = U; - - let ref mut a @ ( - //~^ ERROR cannot borrow value as mutable more than once at a time - ref mut b, - [ - ref mut c, - ref mut d, - ref e, - ] - ) = (U, [U, U, U]); - - let ref mut a @ ( - //~^ ERROR cannot borrow value as mutable more than once at a time - ref mut b, - [ - ref mut c, - ref mut d, - ref e, - ] - ) = (u(), [u(), u(), u()]); - - let a @ (ref mut b, ref mut c) = (U, U); - //~^ ERROR borrow of moved value - let mut val = (U, [U, U]); - let a @ (b, [c, d]) = &mut val; // Same as ^-- - //~^ ERROR borrow of moved value - - let a @ &mut ref mut b = &mut U; - //~^ ERROR borrow of moved value - let a @ &mut (ref mut b, ref mut c) = &mut (U, U); - //~^ ERROR borrow of moved value - - match Ok(U) { - ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - //~^ ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - } - } - match Ok(U) { - ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - //~^ ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - *b = U; - } - } - match Ok(U) { - ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - //~^ ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - *a = Err(U); - - // FIXME: The binding name value used above makes for problematic diagnostics. - // Resolve that somehow... - } - } - match Ok(U) { - ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - //~^ ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - //~| ERROR cannot borrow value as mutable more than once at a time - drop(a); - } - } -} diff --git a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-twice.stderr b/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-twice.stderr deleted file mode 100644 index ad4ce7952..000000000 --- a/src/test/ui/pattern/bindings-after-at/borrowck-pat-ref-mut-twice.stderr +++ /dev/null @@ -1,359 +0,0 @@ -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:26:9 - | -LL | let ref mut a @ ref mut b = U; - | ---------^^^--------- - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:29:9 - | -LL | let ref mut a @ ref mut b = U; - | ---------^^^--------- - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:33:9 - | -LL | let ref mut a @ ref mut b = U; - | ---------^^^--------- - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:36:9 - | -LL | let ref mut a @ ref mut b = U; - | ---------^^^--------- - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:39:9 - | -LL | let ref mut a @ ref mut b = U; - | ---------^^^--------- - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:44:9 - | -LL | let ref mut a @ ( - | ^-------- - | | - | _________first mutable borrow, by `a`, occurs here - | | -LL | | -LL | | ref mut b, - | | --------- another mutable borrow, by `b`, occurs here -LL | | [ -LL | | ref mut c, - | | --------- another mutable borrow, by `c`, occurs here -LL | | ref mut d, - | | --------- another mutable borrow, by `d`, occurs here -LL | | ref e, - | | ----- also borrowed as immutable, by `e`, here -LL | | ] -LL | | ) = (U, [U, U, U]); - | |_____^ - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:54:9 - | -LL | let ref mut a @ ( - | ^-------- - | | - | _________first mutable borrow, by `a`, occurs here - | | -LL | | -LL | | ref mut b, - | | --------- another mutable borrow, by `b`, occurs here -LL | | [ -LL | | ref mut c, - | | --------- another mutable borrow, by `c`, occurs here -LL | | ref mut d, - | | --------- another mutable borrow, by `d`, occurs here -LL | | ref e, - | | ----- also borrowed as immutable, by `e`, here -LL | | ] -LL | | ) = (u(), [u(), u(), u()]); - | |_________^ - -error: borrow of moved value - --> $DIR/borrowck-pat-ref-mut-twice.rs:64:9 - | -LL | let a @ (ref mut b, ref mut c) = (U, U); - | -^^^^---------^^---------^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `(U, U)` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (ref mut b, ref mut c) = (U, U); - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-ref-mut-twice.rs:67:9 - | -LL | let a @ (b, [c, d]) = &mut val; // Same as ^-- - | -^^^^-^^^-^^-^^ - | | | | | - | | | | value borrowed here after move - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `&mut (U, [U; 2])` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ (b, [c, d]) = &mut val; // Same as ^-- - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-ref-mut-twice.rs:70:9 - | -LL | let a @ &mut ref mut b = &mut U; - | -^^^^^^^^--------- - | | | - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `&mut U` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ &mut ref mut b = &mut U; - | +++ - -error: borrow of moved value - --> $DIR/borrowck-pat-ref-mut-twice.rs:72:9 - | -LL | let a @ &mut (ref mut b, ref mut c) = &mut (U, U); - | -^^^^^^^^^---------^^---------^ - | | | | - | | | value borrowed here after move - | | value borrowed here after move - | value moved into `a` here - | move occurs because `a` has type `&mut (U, U)` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ &mut (ref mut b, ref mut c) = &mut (U, U); - | +++ - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:76:9 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | ---------^^^^^^---------^ - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:76:37 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | ---------^^^^^^^---------^ - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:82:9 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | ---------^^^^^^---------^ - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:82:37 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | ---------^^^^^^^---------^ - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:89:9 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | ---------^^^^^^---------^ - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:89:37 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | ---------^^^^^^^---------^ - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:101:9 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | ---------^^^^^^---------^ - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:101:37 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | ---------^^^^^^^---------^ - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:8:11 - | -LL | fn f1(ref mut a @ ref mut b: U) {} - | ---------^^^--------- - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:10:11 - | -LL | fn f2(ref mut a @ ref mut b: U) {} - | ---------^^^--------- - | | | - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:13:9 - | -LL | ref mut a @ [ - | ^-------- - | | - | _________first mutable borrow, by `a`, occurs here - | | -LL | | -LL | | [ref b @ .., _], - | | ---------- also borrowed as immutable, by `b`, here -LL | | [_, ref mut mid @ ..], - | | ---------------- another mutable borrow, by `mid`, occurs here -LL | | .., -LL | | [..], -LL | | ] : [[U; 4]; 5] - | |_________^ - -error: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:21:22 - | -LL | fn f4_also_moved(ref mut a @ ref mut b @ c: U) {} - | ---------^^^------------- - | | | | - | | | also moved into `c` here - | | another mutable borrow, by `b`, occurs here - | first mutable borrow, by `a`, occurs here - -error: cannot move out of value because it is borrowed - --> $DIR/borrowck-pat-ref-mut-twice.rs:21:34 - | -LL | fn f4_also_moved(ref mut a @ ref mut b @ c: U) {} - | ---------^^^- - | | | - | | value moved into `c` here - | value borrowed, by `b`, here - -error[E0499]: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:29:9 - | -LL | let ref mut a @ ref mut b = U; - | ^^^^^^^^^ --------- first mutable borrow occurs here - | | - | second mutable borrow occurs here -... -LL | drop(b); - | - first borrow later used here - -error[E0499]: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:39:9 - | -LL | let ref mut a @ ref mut b = U; - | ^^^^^^^^^ --------- first mutable borrow occurs here - | | - | second mutable borrow occurs here -... -LL | *b = U; - | ------ first borrow later used here - -error[E0499]: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:89:24 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | --------- ^^^^^^^^^ second mutable borrow occurs here - | | - | first mutable borrow occurs here -... -LL | *a = Err(U); - | ----------- first borrow later used here - -error[E0499]: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:89:53 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | --------- ^^^^^^^^^ second mutable borrow occurs here - | | - | first mutable borrow occurs here -... -LL | *a = Err(U); - | ----------- first borrow later used here - -error[E0499]: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:101:24 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | --------- ^^^^^^^^^ second mutable borrow occurs here - | | - | first mutable borrow occurs here -... -LL | drop(a); - | - first borrow later used here - -error[E0499]: cannot borrow value as mutable more than once at a time - --> $DIR/borrowck-pat-ref-mut-twice.rs:101:53 - | -LL | ref mut a @ Ok(ref mut b) | ref mut a @ Err(ref mut b) => { - | --------- ^^^^^^^^^ second mutable borrow occurs here - | | - | first mutable borrow occurs here -... -LL | drop(a); - | - first borrow later used here - -error[E0382]: borrow of moved value - --> $DIR/borrowck-pat-ref-mut-twice.rs:21:34 - | -LL | fn f4_also_moved(ref mut a @ ref mut b @ c: U) {} - | --------- ^^^^^^^^^ - value moved here - | | | - | | value borrowed here after move - | move occurs because value has type `U`, which does not implement the `Copy` trait - -error: aborting due to 31 previous errors - -Some errors have detailed explanations: E0382, E0499. -For more information about an error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/box-patterns.rs b/src/test/ui/pattern/bindings-after-at/box-patterns.rs deleted file mode 100644 index 9db37253c..000000000 --- a/src/test/ui/pattern/bindings-after-at/box-patterns.rs +++ /dev/null @@ -1,35 +0,0 @@ -// Test bindings-after-at with box-patterns - -// run-pass - -#![feature(box_patterns)] - -#[derive(Debug, PartialEq)] -enum MatchArm { - Arm(usize), - Wild, -} - -fn test(x: Option<Box<i32>>) -> MatchArm { - match x { - ref bar @ Some(box n) if n > 0 => { - // bar is a &Option<Box<i32>> - assert_eq!(bar, &x); - - MatchArm::Arm(0) - }, - Some(ref bar @ box n) if n < 0 => { - // bar is a &Box<i32> here - assert_eq!(**bar, n); - - MatchArm::Arm(1) - }, - _ => MatchArm::Wild, - } -} - -fn main() { - assert_eq!(test(Some(Box::new(2))), MatchArm::Arm(0)); - assert_eq!(test(Some(Box::new(-1))), MatchArm::Arm(1)); - assert_eq!(test(Some(Box::new(0))), MatchArm::Wild); -} diff --git a/src/test/ui/pattern/bindings-after-at/copy-and-move-mixed.rs b/src/test/ui/pattern/bindings-after-at/copy-and-move-mixed.rs deleted file mode 100644 index 1e2c2968c..000000000 --- a/src/test/ui/pattern/bindings-after-at/copy-and-move-mixed.rs +++ /dev/null @@ -1,14 +0,0 @@ -// Test that mixing `Copy` and non-`Copy` types in `@` patterns is forbidden. - -#[derive(Copy, Clone)] -struct C; - -struct NC<A, B>(A, B); - -fn main() { - // this compiles - let a @ NC(b, c) = NC(C, C); - - let a @ NC(b, c @ NC(d, e)) = NC(C, NC(C, C)); - //~^ ERROR use of partially moved value -} diff --git a/src/test/ui/pattern/bindings-after-at/copy-and-move-mixed.stderr b/src/test/ui/pattern/bindings-after-at/copy-and-move-mixed.stderr deleted file mode 100644 index e0e623fa5..000000000 --- a/src/test/ui/pattern/bindings-after-at/copy-and-move-mixed.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error[E0382]: use of partially moved value - --> $DIR/copy-and-move-mixed.rs:12:9 - | -LL | let a @ NC(b, c @ NC(d, e)) = NC(C, NC(C, C)); - | ^ - value partially moved here - | | - | value used here after partial move - | - = note: partial move occurs because value has type `NC<C, C>`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref a @ NC(b, ref c @ NC(d, e)) = NC(C, NC(C, C)); - | +++ +++ - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/default-binding-modes-both-sides-independent.rs b/src/test/ui/pattern/bindings-after-at/default-binding-modes-both-sides-independent.rs deleted file mode 100644 index dfd4d0285..000000000 --- a/src/test/ui/pattern/bindings-after-at/default-binding-modes-both-sides-independent.rs +++ /dev/null @@ -1,48 +0,0 @@ -// Ensures the independence of each side in `binding @ subpat` -// determine their binding modes independently of each other. -// -// That is, `binding` does not influence `subpat`. -// This is important because we might want to allow `p1 @ p2`, -// where both `p1` and `p2` are syntactically unrestricted patterns. -// If `binding` is allowed to influence `subpat`, -// this would create problems for the generalization aforementioned. - - -fn main() { - struct NotCopy; - - fn f1(a @ b: &NotCopy) { // OK - let _: &NotCopy = a; - } - fn f2(ref a @ b: &NotCopy) { - let _: &&NotCopy = a; // Ok - } - - let a @ b = &NotCopy; // OK - let _: &NotCopy = a; - let ref a @ b = &NotCopy; // OK - let _: &&NotCopy = a; - - let ref a @ b = NotCopy; //~ ERROR cannot move out of value because it is borrowed - let _a: &NotCopy = a; - let _b: NotCopy = b; - let ref mut a @ b = NotCopy; //~ ERROR cannot move out of value because it is borrowed - //~^ ERROR borrow of moved value - let _a: &NotCopy = a; - let _b: NotCopy = b; - match Ok(NotCopy) { - Ok(ref a @ b) | Err(b @ ref a) => { - //~^ ERROR cannot move out of value because it is borrowed - //~| ERROR borrow of moved value - let _a: &NotCopy = a; - let _b: NotCopy = b; - } - } - match NotCopy { - ref a @ b => { - //~^ ERROR cannot move out of value because it is borrowed - let _a: &NotCopy = a; - let _b: NotCopy = b; - } - } -} diff --git a/src/test/ui/pattern/bindings-after-at/default-binding-modes-both-sides-independent.stderr b/src/test/ui/pattern/bindings-after-at/default-binding-modes-both-sides-independent.stderr deleted file mode 100644 index 638bdd6db..000000000 --- a/src/test/ui/pattern/bindings-after-at/default-binding-modes-both-sides-independent.stderr +++ /dev/null @@ -1,68 +0,0 @@ -error: cannot move out of value because it is borrowed - --> $DIR/default-binding-modes-both-sides-independent.rs:26:9 - | -LL | let ref a @ b = NotCopy; - | -----^^^- - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/default-binding-modes-both-sides-independent.rs:29:9 - | -LL | let ref mut a @ b = NotCopy; - | ---------^^^- - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: cannot move out of value because it is borrowed - --> $DIR/default-binding-modes-both-sides-independent.rs:34:12 - | -LL | Ok(ref a @ b) | Err(b @ ref a) => { - | -----^^^- - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error: borrow of moved value - --> $DIR/default-binding-modes-both-sides-independent.rs:34:29 - | -LL | Ok(ref a @ b) | Err(b @ ref a) => { - | -^^^----- - | | | - | | value borrowed here after move - | value moved into `b` here - | move occurs because `b` has type `NotCopy` which does not implement the `Copy` trait - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | Ok(ref a @ b) | Err(ref b @ ref a) => { - | +++ - -error: cannot move out of value because it is borrowed - --> $DIR/default-binding-modes-both-sides-independent.rs:42:9 - | -LL | ref a @ b => { - | -----^^^- - | | | - | | value moved into `b` here - | value borrowed, by `a`, here - -error[E0382]: borrow of moved value - --> $DIR/default-binding-modes-both-sides-independent.rs:29:9 - | -LL | let ref mut a @ b = NotCopy; - | ^^^^^^^^^ - ------- move occurs because value has type `NotCopy`, which does not implement the `Copy` trait - | | | - | | value moved here - | value borrowed here after move - | -help: borrow this binding in the pattern to avoid moving the value - | -LL | let ref mut a @ ref b = NotCopy; - | +++ - -error: aborting due to 6 previous errors - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/bindings-after-at/nested-binding-mode-lint.rs b/src/test/ui/pattern/bindings-after-at/nested-binding-mode-lint.rs deleted file mode 100644 index fe7d1eba1..000000000 --- a/src/test/ui/pattern/bindings-after-at/nested-binding-mode-lint.rs +++ /dev/null @@ -1,12 +0,0 @@ -// check-pass - -#![deny(unused_mut)] - -fn main() { - let mut is_mut @ not_mut = 42; - &mut is_mut; - ¬_mut; - let not_mut @ mut is_mut = 42; - &mut is_mut; - ¬_mut; -} diff --git a/src/test/ui/pattern/bindings-after-at/nested-binding-modes-mut.rs b/src/test/ui/pattern/bindings-after-at/nested-binding-modes-mut.rs deleted file mode 100644 index e7d99534d..000000000 --- a/src/test/ui/pattern/bindings-after-at/nested-binding-modes-mut.rs +++ /dev/null @@ -1,11 +0,0 @@ -fn main() { - let mut is_mut @ not_mut = 42; - &mut is_mut; - &mut not_mut; - //~^ ERROR cannot borrow - - let not_mut @ mut is_mut = 42; - &mut is_mut; - &mut not_mut; - //~^ ERROR cannot borrow -} diff --git a/src/test/ui/pattern/bindings-after-at/nested-binding-modes-mut.stderr b/src/test/ui/pattern/bindings-after-at/nested-binding-modes-mut.stderr deleted file mode 100644 index 70beb5d42..000000000 --- a/src/test/ui/pattern/bindings-after-at/nested-binding-modes-mut.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0596]: cannot borrow `not_mut` as mutable, as it is not declared as mutable - --> $DIR/nested-binding-modes-mut.rs:4:5 - | -LL | let mut is_mut @ not_mut = 42; - | ------- help: consider changing this to be mutable: `mut not_mut` -LL | &mut is_mut; -LL | &mut not_mut; - | ^^^^^^^^^^^^ cannot borrow as mutable - -error[E0596]: cannot borrow `not_mut` as mutable, as it is not declared as mutable - --> $DIR/nested-binding-modes-mut.rs:9:5 - | -LL | let not_mut @ mut is_mut = 42; - | ------- help: consider changing this to be mutable: `mut not_mut` -LL | &mut is_mut; -LL | &mut not_mut; - | ^^^^^^^^^^^^ cannot borrow as mutable - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0596`. diff --git a/src/test/ui/pattern/bindings-after-at/nested-binding-modes-ref.rs b/src/test/ui/pattern/bindings-after-at/nested-binding-modes-ref.rs deleted file mode 100644 index adfb0387f..000000000 --- a/src/test/ui/pattern/bindings-after-at/nested-binding-modes-ref.rs +++ /dev/null @@ -1,11 +0,0 @@ -fn main() { - let ref is_ref @ is_val = 42; - *is_ref; - *is_val; - //~^ ERROR cannot be dereferenced - - let is_val @ ref is_ref = 42; - *is_ref; - *is_val; - //~^ ERROR cannot be dereferenced -} diff --git a/src/test/ui/pattern/bindings-after-at/nested-binding-modes-ref.stderr b/src/test/ui/pattern/bindings-after-at/nested-binding-modes-ref.stderr deleted file mode 100644 index b378fe356..000000000 --- a/src/test/ui/pattern/bindings-after-at/nested-binding-modes-ref.stderr +++ /dev/null @@ -1,15 +0,0 @@ -error[E0614]: type `{integer}` cannot be dereferenced - --> $DIR/nested-binding-modes-ref.rs:4:5 - | -LL | *is_val; - | ^^^^^^^ - -error[E0614]: type `{integer}` cannot be dereferenced - --> $DIR/nested-binding-modes-ref.rs:9:5 - | -LL | *is_val; - | ^^^^^^^ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0614`. diff --git a/src/test/ui/pattern/bindings-after-at/nested-patterns.rs b/src/test/ui/pattern/bindings-after-at/nested-patterns.rs deleted file mode 100644 index f06563d56..000000000 --- a/src/test/ui/pattern/bindings-after-at/nested-patterns.rs +++ /dev/null @@ -1,14 +0,0 @@ -// run-pass - - -struct A { a: u8, b: u8 } - -pub fn main() { - match (A { a: 10, b: 20 }) { - ref x @ A { ref a, b: 20 } => { - assert_eq!(x.a, 10); - assert_eq!(*a, 10); - } - A { b: ref _b, .. } => panic!(), - } -} diff --git a/src/test/ui/pattern/bindings-after-at/nested-type-ascription-syntactically-invalid.rs b/src/test/ui/pattern/bindings-after-at/nested-type-ascription-syntactically-invalid.rs deleted file mode 100644 index a709e34b5..000000000 --- a/src/test/ui/pattern/bindings-after-at/nested-type-ascription-syntactically-invalid.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Here we check that type ascription is syntactically invalid when -// not in the top position of an ascribing `let` binding or function parameter. - - -// This has no effect. -// We include it to demonstrate that this is the case: -#![feature(type_ascription)] - -fn main() {} - -fn _ok() { - let _a @ _b: u8 = 0; // OK. - fn _f(_a @ _b: u8) {} // OK. -} - -#[cfg(FALSE)] -fn case_1() { - let a: u8 @ b = 0; - //~^ ERROR expected one of `!` -} - -#[cfg(FALSE)] -fn case_2() { - let a @ (b: u8); - //~^ ERROR expected one of `!` - //~| ERROR expected one of `)` -} - -#[cfg(FALSE)] -fn case_3() { - let a: T1 @ Outer(b: T2); - //~^ ERROR expected one of `!` -} diff --git a/src/test/ui/pattern/bindings-after-at/nested-type-ascription-syntactically-invalid.stderr b/src/test/ui/pattern/bindings-after-at/nested-type-ascription-syntactically-invalid.stderr deleted file mode 100644 index 27660ae40..000000000 --- a/src/test/ui/pattern/bindings-after-at/nested-type-ascription-syntactically-invalid.stderr +++ /dev/null @@ -1,26 +0,0 @@ -error: expected one of `!`, `(`, `+`, `::`, `;`, `<`, or `=`, found `@` - --> $DIR/nested-type-ascription-syntactically-invalid.rs:18:15 - | -LL | let a: u8 @ b = 0; - | ^ expected one of 7 possible tokens - -error: expected one of `)`, `,`, `@`, or `|`, found `:` - --> $DIR/nested-type-ascription-syntactically-invalid.rs:24:15 - | -LL | let a @ (b: u8); - | ^ expected one of `)`, `,`, `@`, or `|` - -error: expected one of `!`, `(`, `+`, `::`, `;`, `<`, or `=`, found `)` - --> $DIR/nested-type-ascription-syntactically-invalid.rs:24:19 - | -LL | let a @ (b: u8); - | ^ expected one of 7 possible tokens - -error: expected one of `!`, `(`, `+`, `::`, `;`, `<`, or `=`, found `@` - --> $DIR/nested-type-ascription-syntactically-invalid.rs:31:15 - | -LL | let a: T1 @ Outer(b: T2); - | ^ expected one of 7 possible tokens - -error: aborting due to 4 previous errors - diff --git a/src/test/ui/pattern/bindings-after-at/or-patterns-box-patterns.rs b/src/test/ui/pattern/bindings-after-at/or-patterns-box-patterns.rs deleted file mode 100644 index 383e377a5..000000000 --- a/src/test/ui/pattern/bindings-after-at/or-patterns-box-patterns.rs +++ /dev/null @@ -1,43 +0,0 @@ -// Test bindings-after-at with or-patterns and box-patterns - -// run-pass - -#![feature(box_patterns)] - -#[derive(Debug, PartialEq)] -enum MatchArm { - Arm(usize), - Wild, -} - -#[derive(Debug, PartialEq)] -enum Test { - Foo, - Bar, - Baz, - Qux, -} - -fn test(foo: Option<Box<Test>>) -> MatchArm { - match foo { - ref bar @ Some(box Test::Foo | box Test::Bar) => { - assert_eq!(bar, &foo); - - MatchArm::Arm(0) - }, - Some(ref bar @ box Test::Baz | ref bar @ box Test::Qux) => { - assert!(**bar == Test::Baz || **bar == Test::Qux); - - MatchArm::Arm(1) - }, - _ => MatchArm::Wild, - } -} - -fn main() { - assert_eq!(test(Some(Box::new(Test::Foo))), MatchArm::Arm(0)); - assert_eq!(test(Some(Box::new(Test::Bar))), MatchArm::Arm(0)); - assert_eq!(test(Some(Box::new(Test::Baz))), MatchArm::Arm(1)); - assert_eq!(test(Some(Box::new(Test::Qux))), MatchArm::Arm(1)); - assert_eq!(test(None), MatchArm::Wild); -} diff --git a/src/test/ui/pattern/bindings-after-at/or-patterns-slice-patterns.rs b/src/test/ui/pattern/bindings-after-at/or-patterns-slice-patterns.rs deleted file mode 100644 index d315f7ee3..000000000 --- a/src/test/ui/pattern/bindings-after-at/or-patterns-slice-patterns.rs +++ /dev/null @@ -1,54 +0,0 @@ -// Test bindings-after-at with or-patterns and slice-patterns - -// run-pass - - -#[derive(Debug, PartialEq)] -enum MatchArm { - Arm(usize), - Wild, -} - -#[derive(Debug, PartialEq)] -enum Test { - Foo, - Bar, - Baz, - Qux, -} - -fn test(foo: &[Option<Test>]) -> MatchArm { - match foo { - bar @ [Some(Test::Foo), .., Some(Test::Qux | Test::Foo)] => { - assert_eq!(bar, foo); - - MatchArm::Arm(0) - }, - [.., bar @ Some(Test::Bar | Test::Qux), _] => { - assert!(bar == &Some(Test::Bar) || bar == &Some(Test::Qux)); - - MatchArm::Arm(1) - }, - _ => MatchArm::Wild, - } -} - -fn main() { - let foo = vec![ - Some(Test::Foo), - Some(Test::Bar), - Some(Test::Baz), - Some(Test::Qux), - ]; - - // path 1a - assert_eq!(test(&foo), MatchArm::Arm(0)); - // path 1b - assert_eq!(test(&[Some(Test::Foo), Some(Test::Bar), Some(Test::Foo)]), MatchArm::Arm(0)); - // path 2a - assert_eq!(test(&foo[..3]), MatchArm::Arm(1)); - // path 2b - assert_eq!(test(&[Some(Test::Bar), Some(Test::Qux), Some(Test::Baz)]), MatchArm::Arm(1)); - // path 3 - assert_eq!(test(&foo[1..2]), MatchArm::Wild); -} diff --git a/src/test/ui/pattern/bindings-after-at/or-patterns.rs b/src/test/ui/pattern/bindings-after-at/or-patterns.rs deleted file mode 100644 index fcc361489..000000000 --- a/src/test/ui/pattern/bindings-after-at/or-patterns.rs +++ /dev/null @@ -1,38 +0,0 @@ -// Test bindings-after-at with or-patterns - -// run-pass - - -#[derive(Debug, PartialEq)] -enum MatchArm { - Arm(usize), - Wild, -} - -#[derive(Debug, Clone, Copy, PartialEq)] -enum Test { - Foo, - Bar, - Baz, - Qux, -} - -fn test(foo: Option<Test>) -> MatchArm { - match foo { - bar @ Some(Test::Foo | Test::Bar) => { - assert!(bar == Some(Test::Foo) || bar == Some(Test::Bar)); - - MatchArm::Arm(0) - }, - Some(_) => MatchArm::Arm(1), - _ => MatchArm::Wild, - } -} - -fn main() { - assert_eq!(test(Some(Test::Foo)), MatchArm::Arm(0)); - assert_eq!(test(Some(Test::Bar)), MatchArm::Arm(0)); - assert_eq!(test(Some(Test::Baz)), MatchArm::Arm(1)); - assert_eq!(test(Some(Test::Qux)), MatchArm::Arm(1)); - assert_eq!(test(None), MatchArm::Wild); -} 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 deleted file mode 100644 index f167a3952..000000000 --- a/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.rs +++ /dev/null @@ -1,29 +0,0 @@ -// Test that `binding @ subpat` acts as a product context with respect to duplicate binding names. -// The code that is tested here lives in resolve (see `resolve_pattern_inner`). - - -fn main() { - fn f(a @ a @ a: ()) {} - //~^ ERROR identifier `a` is bound more than once in this parameter list - //~| ERROR identifier `a` is bound more than once in this parameter list - - match Ok(0) { - Ok(a @ b @ a) - //~^ ERROR identifier `a` is bound more than once in the same pattern - | Err(a @ b @ a) - //~^ ERROR identifier `a` is bound more than once in the same pattern - => {} - } - - let a @ a @ a = (); - //~^ ERROR identifier `a` is bound more than once in the same pattern - //~| ERROR identifier `a` is bound more than once in the same pattern - let ref a @ ref a = (); - //~^ ERROR identifier `a` is bound more than once in the same pattern - let ref mut a @ ref mut a = (); - //~^ ERROR identifier `a` is bound more than once in the same pattern - - let a @ (Ok(a) | Err(a)) = Ok(()); - //~^ ERROR identifier `a` is bound more than once in the same pattern - //~| ERROR identifier `a` is bound more than once in the same pattern -} 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 deleted file mode 100644 index a165549f6..000000000 --- a/src/test/ui/pattern/bindings-after-at/pat-at-same-name-both.stderr +++ /dev/null @@ -1,64 +0,0 @@ -error[E0415]: identifier `a` is bound more than once in this parameter list - --> $DIR/pat-at-same-name-both.rs:6: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:6: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:11: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:13: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:18: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:18: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:21: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:23: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:26: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:26:26 - | -LL | let a @ (Ok(a) | Err(a)) = Ok(()); - | ^ used in a pattern more than once - -error: aborting due to 10 previous errors - -Some errors have detailed explanations: E0415, E0416. -For more information about an error, try `rustc --explain E0415`. diff --git a/src/test/ui/pattern/bindings-after-at/slice-patterns.rs b/src/test/ui/pattern/bindings-after-at/slice-patterns.rs deleted file mode 100644 index 4f4c96e45..000000000 --- a/src/test/ui/pattern/bindings-after-at/slice-patterns.rs +++ /dev/null @@ -1,39 +0,0 @@ -// Test bindings-after-at with slice-patterns - -// run-pass - - -#[derive(Debug, PartialEq)] -enum MatchArm { - Arm(usize), - Wild, -} - -fn test(foo: &[i32]) -> MatchArm { - match foo { - [bar @ .., n] if n == &5 => { - for i in bar { - assert!(i < &5); - } - - MatchArm::Arm(0) - }, - bar @ [x0, .., xn] => { - assert_eq!(x0, &1); - assert_eq!(x0, &1); - assert_eq!(xn, &4); - assert_eq!(bar, &[1, 2, 3, 4]); - - MatchArm::Arm(1) - }, - _ => MatchArm::Wild, - } -} - -fn main() { - let foo = vec![1, 2, 3, 4, 5]; - - assert_eq!(test(&foo), MatchArm::Arm(0)); - assert_eq!(test(&foo[..4]), MatchArm::Arm(1)); - assert_eq!(test(&foo[0..1]), MatchArm::Wild); -} diff --git a/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.rs b/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.rs deleted file mode 100644 index 50ac0ef27..000000000 --- a/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.rs +++ /dev/null @@ -1,16 +0,0 @@ -// Here we check that `_ @ sub` is syntactically invalid -// and comes with a nice actionable suggestion. - -fn main() {} - -#[cfg(FALSE)] -fn wild_before_at_is_bad_syntax() { - let _ @ a = 0; - //~^ ERROR pattern on wrong side of `@` - let _ @ ref a = 0; - //~^ ERROR pattern on wrong side of `@` - let _ @ ref mut a = 0; - //~^ ERROR pattern on wrong side of `@` - let _ @ (a, .., b) = (0, 1, 2, 3); - //~^ ERROR left-hand side of `@` must be a binding -} diff --git a/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.stderr b/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.stderr deleted file mode 100644 index 2f4541584..000000000 --- a/src/test/ui/pattern/bindings-after-at/wild-before-at-syntactically-rejected.stderr +++ /dev/null @@ -1,43 +0,0 @@ -error: pattern on wrong side of `@` - --> $DIR/wild-before-at-syntactically-rejected.rs:8:9 - | -LL | let _ @ a = 0; - | -^^^- - | | | - | | binding on the right, should be on the left - | pattern on the left, should be on the right - | help: switch the order: `a @ _` - -error: pattern on wrong side of `@` - --> $DIR/wild-before-at-syntactically-rejected.rs:10:9 - | -LL | let _ @ ref a = 0; - | -^^^----- - | | | - | | binding on the right, should be on the left - | pattern on the left, should be on the right - | help: switch the order: `ref a @ _` - -error: pattern on wrong side of `@` - --> $DIR/wild-before-at-syntactically-rejected.rs:12:9 - | -LL | let _ @ ref mut a = 0; - | -^^^--------- - | | | - | | binding on the right, should be on the left - | pattern on the left, should be on the right - | help: switch the order: `ref mut a @ _` - -error: left-hand side of `@` must be a binding - --> $DIR/wild-before-at-syntactically-rejected.rs:14:9 - | -LL | let _ @ (a, .., b) = (0, 1, 2, 3); - | -^^^---------- - | | | - | | also a pattern - | interpreted as a pattern, not a binding - | - = note: bindings are `x`, `mut x`, `ref x`, and `ref mut x` - -error: aborting due to 4 previous errors - diff --git a/src/test/ui/pattern/for-loop-bad-item.rs b/src/test/ui/pattern/for-loop-bad-item.rs deleted file mode 100644 index 9a56a399b..000000000 --- a/src/test/ui/pattern/for-loop-bad-item.rs +++ /dev/null @@ -1,20 +0,0 @@ -struct Qux(i32); - -fn bad() { - let mut map = std::collections::HashMap::new(); - map.insert(('a', 'b'), ('c', 'd')); - - for ((_, _), (&mut c, _)) in &mut map { - //~^ ERROR mismatched types - if c == 'e' {} - } -} - -fn bad2() { - for Some(Qux(_)) | None in [Some(""), None] { - //~^ ERROR mismatched types - todo!(); - } -} - -fn main() {} diff --git a/src/test/ui/pattern/for-loop-bad-item.stderr b/src/test/ui/pattern/for-loop-bad-item.stderr deleted file mode 100644 index f064a25a9..000000000 --- a/src/test/ui/pattern/for-loop-bad-item.stderr +++ /dev/null @@ -1,32 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/for-loop-bad-item.rs:7:19 - | -LL | for ((_, _), (&mut c, _)) in &mut map { - | ^^^^^^ -------- this is an iterator with items of type `(&(char, char), &mut (char, char))` - | | - | expected `char`, found `&mut _` - | - = note: expected type `char` - found mutable reference `&mut _` -note: to declare a mutable binding use: `mut c` - --> $DIR/for-loop-bad-item.rs:7:19 - | -LL | for ((_, _), (&mut c, _)) in &mut map { - | ^^^^^^ -help: consider removing `&mut` from the pattern - | -LL - for ((_, _), (&mut c, _)) in &mut map { -LL + for ((_, _), (c, _)) in &mut map { - | - -error[E0308]: mismatched types - --> $DIR/for-loop-bad-item.rs:14:14 - | -LL | for Some(Qux(_)) | None in [Some(""), None] { - | ^^^^^^ ---------------- this is an iterator with items of type `Option<&str>` - | | - | expected `str`, found struct `Qux` - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/pattern/ignore-all-the-things.rs b/src/test/ui/pattern/ignore-all-the-things.rs deleted file mode 100644 index 5980e1a85..000000000 --- a/src/test/ui/pattern/ignore-all-the-things.rs +++ /dev/null @@ -1,44 +0,0 @@ -// run-pass - -#![allow(non_shorthand_field_patterns)] -#![allow(dead_code)] -#![allow(unused_variables)] - -struct Foo(isize, isize, isize, isize); -struct Bar{a: isize, b: isize, c: isize, d: isize} - -pub fn main() { - let Foo(..) = Foo(5, 5, 5, 5); - let Foo(..) = Foo(5, 5, 5, 5); - let Bar{..} = Bar{a: 5, b: 5, c: 5, d: 5}; - let (..) = (5, 5, 5, 5); - let Foo(a, b, ..) = Foo(5, 5, 5, 5); - let Foo(.., d) = Foo(5, 5, 5, 5); - let (a, b, ..) = (5, 5, 5, 5); - let (.., c, d) = (5, 5, 5, 5); - let Bar{b: b, ..} = Bar{a: 5, b: 5, c: 5, d: 5}; - match [5, 5, 5, 5] { - [..] => { } - } - match [5, 5, 5, 5] { - [a, ..] => { } - } - match [5, 5, 5, 5] { - [.., b] => { } - } - match [5, 5, 5, 5] { - [a, .., b] => { } - } - match [5, 5, 5] { - [..] => { } - } - match [5, 5, 5] { - [a, ..] => { } - } - match [5, 5, 5] { - [.., a] => { } - } - match [5, 5, 5] { - [a, .., b] => { } - } -} diff --git a/src/test/ui/pattern/integer-range-binding.rs b/src/test/ui/pattern/integer-range-binding.rs deleted file mode 100644 index ff065882d..000000000 --- a/src/test/ui/pattern/integer-range-binding.rs +++ /dev/null @@ -1,8 +0,0 @@ -// run-pass - -fn main() { - let -2147483648..=2147483647 = 1; - let 0..=255 = 0u8; - let -128..=127 = 0i8; - let '\u{0000}'..='\u{10FFFF}' = 'v'; -} diff --git a/src/test/ui/pattern/issue-10392.rs b/src/test/ui/pattern/issue-10392.rs deleted file mode 100644 index 926fa9480..000000000 --- a/src/test/ui/pattern/issue-10392.rs +++ /dev/null @@ -1,30 +0,0 @@ -// run-pass -#![allow(unused_variables)] - -struct A { foo: isize } -struct B { a: isize, b: isize, c: isize } - -fn mka() -> A { panic!() } -fn mkb() -> B { panic!() } - -fn test() { - let A { foo, } = mka(); - let A { - foo, - } = mka(); - - let B { a, b, c, } = mkb(); - - match mka() { - A { foo: _foo, } => {} - } - - match Some(mka()) { - Some(A { foo: _foo, }) => {} - None => {} - } -} - -pub fn main() { - if false { test() } -} diff --git a/src/test/ui/pattern/issue-11577.rs b/src/test/ui/pattern/issue-11577.rs deleted file mode 100644 index 70177c5ed..000000000 --- a/src/test/ui/pattern/issue-11577.rs +++ /dev/null @@ -1,18 +0,0 @@ -// run-pass -// Destructuring struct variants would ICE where regular structs wouldn't - -enum Foo { - VBar { num: isize } -} - -struct SBar { num: isize } - -pub fn main() { - let vbar = Foo::VBar { num: 1 }; - let Foo::VBar { num } = vbar; - assert_eq!(num, 1); - - let sbar = SBar { num: 2 }; - let SBar { num } = sbar; - assert_eq!(num, 2); -} diff --git a/src/test/ui/pattern/issue-12582.rs b/src/test/ui/pattern/issue-12582.rs deleted file mode 100644 index f3366704e..000000000 --- a/src/test/ui/pattern/issue-12582.rs +++ /dev/null @@ -1,21 +0,0 @@ -// run-pass - -pub fn main() { - let x = 1; - let y = 2; - - assert_eq!(3, match (x, y) { - (1, 1) => 1, - (2, 2) => 2, - (1..=2, 2) => 3, - _ => 4, - }); - - // nested tuple - assert_eq!(3, match ((x, y),) { - ((1, 1),) => 1, - ((2, 2),) => 2, - ((1..=2, 2),) => 3, - _ => 4, - }); -} diff --git a/src/test/ui/pattern/issue-14221.rs b/src/test/ui/pattern/issue-14221.rs deleted file mode 100644 index 282c41113..000000000 --- a/src/test/ui/pattern/issue-14221.rs +++ /dev/null @@ -1,21 +0,0 @@ -#![deny(unreachable_patterns)] -#![allow(unused_variables)] -#![allow(non_snake_case)] - -pub enum E { - A, - B, -} - -pub mod b { - pub fn key(e: ::E) -> &'static str { - match e { - A => "A", -//~^ WARN pattern binding `A` is named the same as one of the variants of the type `E` - B => "B", //~ ERROR: unreachable pattern -//~^ WARN pattern binding `B` is named the same as one of the variants of the type `E` - } - } -} - -fn main() {} diff --git a/src/test/ui/pattern/issue-14221.stderr b/src/test/ui/pattern/issue-14221.stderr deleted file mode 100644 index fc8ae1ed7..000000000 --- a/src/test/ui/pattern/issue-14221.stderr +++ /dev/null @@ -1,32 +0,0 @@ -warning[E0170]: pattern binding `A` is named the same as one of the variants of the type `E` - --> $DIR/issue-14221.rs:13:13 - | -LL | A => "A", - | ^ help: to match on the variant, qualify the path: `E::A` - | - = note: `#[warn(bindings_with_variant_name)]` on by default - -warning[E0170]: pattern binding `B` is named the same as one of the variants of the type `E` - --> $DIR/issue-14221.rs:15:13 - | -LL | B => "B", - | ^ help: to match on the variant, qualify the path: `E::B` - -error: unreachable pattern - --> $DIR/issue-14221.rs:15:13 - | -LL | A => "A", - | - matches any value -LL | -LL | B => "B", - | ^ unreachable pattern - | -note: the lint level is defined here - --> $DIR/issue-14221.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error; 2 warnings emitted - -For more information about this error, try `rustc --explain E0170`. diff --git a/src/test/ui/pattern/issue-15080.rs b/src/test/ui/pattern/issue-15080.rs deleted file mode 100644 index 4dd6981d4..000000000 --- a/src/test/ui/pattern/issue-15080.rs +++ /dev/null @@ -1,22 +0,0 @@ -// run-pass - -fn main() { - let mut x: &[_] = &[1, 2, 3, 4]; - - let mut result = vec![]; - loop { - x = match *x { - [1, n, 3, ref rest @ ..] => { - result.push(n); - rest - } - [n, ref rest @ ..] => { - result.push(n); - rest - } - [] => - break - } - } - assert_eq!(result, [2, 4]); -} diff --git a/src/test/ui/pattern/issue-17718-patterns.rs b/src/test/ui/pattern/issue-17718-patterns.rs deleted file mode 100644 index 2ca0f67f8..000000000 --- a/src/test/ui/pattern/issue-17718-patterns.rs +++ /dev/null @@ -1,12 +0,0 @@ -static A1: usize = 1; -static mut A2: usize = 1; -const A3: usize = 1; - -fn main() { - match 1 { - A1 => {} //~ ERROR: match bindings cannot shadow statics - A2 => {} //~ ERROR: match bindings cannot shadow statics - A3 => {} - _ => {} - } -} diff --git a/src/test/ui/pattern/issue-17718-patterns.stderr b/src/test/ui/pattern/issue-17718-patterns.stderr deleted file mode 100644 index 109091c2a..000000000 --- a/src/test/ui/pattern/issue-17718-patterns.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0530]: match bindings cannot shadow statics - --> $DIR/issue-17718-patterns.rs:7:9 - | -LL | static A1: usize = 1; - | --------------------- the static `A1` is defined here -... -LL | A1 => {} - | ^^ cannot be named the same as a static - -error[E0530]: match bindings cannot shadow statics - --> $DIR/issue-17718-patterns.rs:8:9 - | -LL | static mut A2: usize = 1; - | ------------------------- the static `A2` is defined here -... -LL | A2 => {} - | ^^ cannot be named the same as a static - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0530`. diff --git a/src/test/ui/pattern/issue-22546.rs b/src/test/ui/pattern/issue-22546.rs deleted file mode 100644 index c26e457f9..000000000 --- a/src/test/ui/pattern/issue-22546.rs +++ /dev/null @@ -1,52 +0,0 @@ -// run-pass -#![allow(unused_variables)] -// Parsing patterns with paths with type parameters (issue #22544) - -use std::default::Default; - -#[derive(Default)] -pub struct Foo<T>(T, T); - -impl<T: ::std::fmt::Display> Foo<T> { - fn foo(&self) { - match *self { - Foo::<T>(ref x, ref y) => println!("Goodbye, World! {} {}", x, y) - } - } -} - -trait Tr { - type U; -} - -impl<T> Tr for Foo<T> { - type U = T; -} - -struct Wrapper<T> { - value: T -} - -fn main() { - let Foo::<i32>(a, b) = Default::default(); - - let f = Foo(2,3); - f.foo(); - - let w = Wrapper { value: Foo(10u8, 11u8) }; - match w { - Wrapper::<Foo<u8>> { value: Foo(10, 11) } => {}, - ::Wrapper::<<Foo<_> as Tr>::U> { value: Foo::<u8>(11, 16) } => { panic!() }, - _ => { panic!() } - } - - if let None::<u8> = Some(8) { - panic!(); - } - if let None::<u8> { .. } = Some(8) { - panic!(); - } - if let Option::None::<u8> { .. } = Some(8) { - panic!(); - } -} diff --git a/src/test/ui/pattern/issue-27320.rs b/src/test/ui/pattern/issue-27320.rs deleted file mode 100644 index d1aa56b91..000000000 --- a/src/test/ui/pattern/issue-27320.rs +++ /dev/null @@ -1,15 +0,0 @@ -// run-pass -#![allow(unused_variables)] -#![allow(dead_code)] - -macro_rules! piece( - ($piece:pat) => ($piece); -); - -enum Piece {A, B} - -fn main() { - match Piece::A { - piece!(pt@ Piece::A) | piece!(pt@ Piece::B) => {} - } -} diff --git a/src/test/ui/pattern/issue-52240.rs b/src/test/ui/pattern/issue-52240.rs deleted file mode 100644 index 5def55778..000000000 --- a/src/test/ui/pattern/issue-52240.rs +++ /dev/null @@ -1,16 +0,0 @@ -// issue-52240: Can turn immutable into mut with `ref mut` - -enum Foo { - Bar(i32), -} - -fn main() { - let arr = vec!(Foo::Bar(0)); - if let (Some(Foo::Bar(ref mut val)), _) = (&arr.get(0), 0) { - //~^ ERROR cannot borrow data in a `&` reference as mutable - *val = 9001; - } - match arr[0] { - Foo::Bar(ref s) => println!("{}", s) - } -} diff --git a/src/test/ui/pattern/issue-52240.stderr b/src/test/ui/pattern/issue-52240.stderr deleted file mode 100644 index 69b663b17..000000000 --- a/src/test/ui/pattern/issue-52240.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0596]: cannot borrow data in a `&` reference as mutable - --> $DIR/issue-52240.rs:9:27 - | -LL | if let (Some(Foo::Bar(ref mut val)), _) = (&arr.get(0), 0) { - | ^^^^^^^^^^^ cannot borrow as mutable - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0596`. diff --git a/src/test/ui/pattern/issue-6449.rs b/src/test/ui/pattern/issue-6449.rs deleted file mode 100644 index bfd4c1232..000000000 --- a/src/test/ui/pattern/issue-6449.rs +++ /dev/null @@ -1,44 +0,0 @@ -// run-pass -#![allow(dead_code)] - -enum Foo { - Bar(isize), - Baz, -} - -enum Other { - Other1(Foo), - Other2(Foo, Foo), -} - -fn main() { - match Foo::Baz { - ::Foo::Bar(3) => panic!(), - ::Foo::Bar(_) if false => panic!(), - ::Foo::Bar(..) if false => panic!(), - ::Foo::Bar(_n) => panic!(), - ::Foo::Baz => {} - } - match Foo::Bar(3) { - ::Foo::Bar(3) => {} - ::Foo::Bar(_) if false => panic!(), - ::Foo::Bar(..) if false => panic!(), - ::Foo::Bar(_n) => panic!(), - ::Foo::Baz => panic!(), - } - match Foo::Bar(4) { - ::Foo::Bar(3) => panic!(), - ::Foo::Bar(_) if false => panic!(), - ::Foo::Bar(..) if false => panic!(), - ::Foo::Bar(n) => assert_eq!(n, 4), - ::Foo::Baz => panic!(), - } - - match Other::Other1(Foo::Baz) { - ::Other::Other1(::Foo::Baz) => {} - ::Other::Other1(::Foo::Bar(_)) => {} - ::Other::Other2(::Foo::Baz, ::Foo::Bar(_)) => {} - ::Other::Other2(::Foo::Bar(..), ::Foo::Baz) => {} - ::Other::Other2(..) => {} - } -} diff --git a/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.rs b/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.rs deleted file mode 100644 index 48a8e0482..000000000 --- a/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.rs +++ /dev/null @@ -1,14 +0,0 @@ -// Regression test for #66270, fixed by #66246 - -struct Bug { - incorrect_field: 0, - //~^ ERROR expected type -} - -struct Empty {} - -fn main() { - let Bug { - any_field: Empty {}, - } = Bug {}; -} diff --git a/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.stderr b/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.stderr deleted file mode 100644 index f40642f30..000000000 --- a/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.stderr +++ /dev/null @@ -1,10 +0,0 @@ -error: expected type, found `0` - --> $DIR/issue-66270-pat-struct-parser-recovery.rs:4:22 - | -LL | struct Bug { - | --- while parsing this struct -LL | incorrect_field: 0, - | ^ expected type - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.rs b/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.rs deleted file mode 100644 index ae28c1403..000000000 --- a/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.rs +++ /dev/null @@ -1,21 +0,0 @@ -// Regression test for #67037. -// -// In type checking patterns, E0023 occurs when the tuple pattern and the expected -// tuple pattern have different number of fields. For example, as below, `P()`, -// the tuple struct pattern, has 0 fields, but requires 1 field. -// -// In emitting E0023, we try to see if this is a case of e.g., `Some(a, b, c)` but where -// the scrutinee was of type `Some((a, b, c))`, and suggest that parentheses be added. -// -// However, we did not account for the expected type being different than the tuple pattern type. -// This caused an issue when the tuple pattern type (`P<T>`) was generic. -// Specifically, we tried deriving the 0th field's type using the `substs` of the expected type. -// When attempting to substitute `T`, there was no such substitution, so "out of range" occurred. - -struct U {} // 0 type parameters offered -struct P<T>(T); // 1 type parameter wanted - -fn main() { - let P() = U {}; //~ ERROR mismatched types - //~^ ERROR this pattern has 0 fields, but the corresponding tuple struct has 1 field -} diff --git a/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr b/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr deleted file mode 100644 index 75a231f6b..000000000 --- a/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr +++ /dev/null @@ -1,33 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/issue-67037-pat-tup-scrut-ty-diff-less-fields.rs:19:9 - | -LL | let P() = U {}; - | ^^^ ---- this expression has type `U` - | | - | expected struct `U`, found struct `P` - | - = note: expected struct `U` - found struct `P<_>` - -error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 1 field - --> $DIR/issue-67037-pat-tup-scrut-ty-diff-less-fields.rs:19:9 - | -LL | struct P<T>(T); // 1 type parameter wanted - | - tuple struct has 1 field -... -LL | let P() = U {}; - | ^^^ expected 1 field, found 0 - | -help: use `_` to explicitly ignore each field - | -LL | let P(_) = U {}; - | + -help: use `..` to ignore all fields - | -LL | let P(..) = U {}; - | ++ - -error: aborting due to 2 previous errors - -Some errors have detailed explanations: E0023, E0308. -For more information about an error, try `rustc --explain E0023`. diff --git a/src/test/ui/pattern/issue-67776-match-same-name-enum-variant-refs.rs b/src/test/ui/pattern/issue-67776-match-same-name-enum-variant-refs.rs deleted file mode 100644 index 6fd5768a5..000000000 --- a/src/test/ui/pattern/issue-67776-match-same-name-enum-variant-refs.rs +++ /dev/null @@ -1,42 +0,0 @@ -// Test for issue #67776: binding named the same as enum variant -// should report a warning even when matching against a reference type - -// check-pass - -#![allow(unused_variables)] -#![allow(non_snake_case)] - -enum Foo { - Bar, - Baz, -} - - -fn fn1(e: Foo) { - match e { - Bar => {}, - //~^ WARNING named the same as one of the variants of the type `Foo` - Baz => {}, - //~^ WARNING named the same as one of the variants of the type `Foo` - } -} - -fn fn2(e: &Foo) { - match e { - Bar => {}, - //~^ WARNING named the same as one of the variants of the type `Foo` - Baz => {}, - //~^ WARNING named the same as one of the variants of the type `Foo` - } -} - -fn fn3(e: &mut &&mut Foo) { - match e { - Bar => {}, - //~^ WARNING named the same as one of the variants of the type `Foo` - Baz => {}, - //~^ WARNING named the same as one of the variants of the type `Foo` - } -} - -fn main() {} diff --git a/src/test/ui/pattern/issue-67776-match-same-name-enum-variant-refs.stderr b/src/test/ui/pattern/issue-67776-match-same-name-enum-variant-refs.stderr deleted file mode 100644 index 6f3613b63..000000000 --- a/src/test/ui/pattern/issue-67776-match-same-name-enum-variant-refs.stderr +++ /dev/null @@ -1,41 +0,0 @@ -warning[E0170]: pattern binding `Bar` is named the same as one of the variants of the type `Foo` - --> $DIR/issue-67776-match-same-name-enum-variant-refs.rs:17:9 - | -LL | Bar => {}, - | ^^^ help: to match on the variant, qualify the path: `Foo::Bar` - | - = note: `#[warn(bindings_with_variant_name)]` on by default - -warning[E0170]: pattern binding `Baz` is named the same as one of the variants of the type `Foo` - --> $DIR/issue-67776-match-same-name-enum-variant-refs.rs:19:9 - | -LL | Baz => {}, - | ^^^ help: to match on the variant, qualify the path: `Foo::Baz` - -warning[E0170]: pattern binding `Bar` is named the same as one of the variants of the type `Foo` - --> $DIR/issue-67776-match-same-name-enum-variant-refs.rs:26:9 - | -LL | Bar => {}, - | ^^^ help: to match on the variant, qualify the path: `Foo::Bar` - -warning[E0170]: pattern binding `Baz` is named the same as one of the variants of the type `Foo` - --> $DIR/issue-67776-match-same-name-enum-variant-refs.rs:28:9 - | -LL | Baz => {}, - | ^^^ help: to match on the variant, qualify the path: `Foo::Baz` - -warning[E0170]: pattern binding `Bar` is named the same as one of the variants of the type `Foo` - --> $DIR/issue-67776-match-same-name-enum-variant-refs.rs:35:9 - | -LL | Bar => {}, - | ^^^ help: to match on the variant, qualify the path: `Foo::Bar` - -warning[E0170]: pattern binding `Baz` is named the same as one of the variants of the type `Foo` - --> $DIR/issue-67776-match-same-name-enum-variant-refs.rs:37:9 - | -LL | Baz => {}, - | ^^^ help: to match on the variant, qualify the path: `Foo::Baz` - -warning: 6 warnings emitted - -For more information about this error, try `rustc --explain E0170`. diff --git a/src/test/ui/pattern/issue-68393-let-pat-assoc-constant.rs b/src/test/ui/pattern/issue-68393-let-pat-assoc-constant.rs deleted file mode 100644 index 95ead6b5d..000000000 --- a/src/test/ui/pattern/issue-68393-let-pat-assoc-constant.rs +++ /dev/null @@ -1,26 +0,0 @@ -pub enum EFoo { - A, -} - -pub trait Foo { - const X: EFoo; -} - -struct Abc; - -impl Foo for Abc { - const X: EFoo = EFoo::A; -} - -struct Def; -impl Foo for Def { - const X: EFoo = EFoo::A; -} - -pub fn test<A: Foo, B: Foo>(arg: EFoo, A::X: EFoo) { - //~^ ERROR associated consts cannot be referenced in patterns - let A::X = arg; - //~^ ERROR associated consts cannot be referenced in patterns -} - -fn main() {} diff --git a/src/test/ui/pattern/issue-68393-let-pat-assoc-constant.stderr b/src/test/ui/pattern/issue-68393-let-pat-assoc-constant.stderr deleted file mode 100644 index 54ecc2498..000000000 --- a/src/test/ui/pattern/issue-68393-let-pat-assoc-constant.stderr +++ /dev/null @@ -1,15 +0,0 @@ -error[E0158]: associated consts cannot be referenced in patterns - --> $DIR/issue-68393-let-pat-assoc-constant.rs:20:40 - | -LL | pub fn test<A: Foo, B: Foo>(arg: EFoo, A::X: EFoo) { - | ^^^^ - -error[E0158]: associated consts cannot be referenced in patterns - --> $DIR/issue-68393-let-pat-assoc-constant.rs:22:9 - | -LL | let A::X = arg; - | ^^^^ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0158`. diff --git a/src/test/ui/pattern/issue-72565.rs b/src/test/ui/pattern/issue-72565.rs deleted file mode 100644 index 1e262fd50..000000000 --- a/src/test/ui/pattern/issue-72565.rs +++ /dev/null @@ -1,8 +0,0 @@ -const F: &'static dyn PartialEq<u32> = &7u32; - -fn main() { - let a: &dyn PartialEq<u32> = &7u32; - match a { - F => panic!(), //~ ERROR: `&dyn PartialEq<u32>` cannot be used in patterns - } -} diff --git a/src/test/ui/pattern/issue-72565.stderr b/src/test/ui/pattern/issue-72565.stderr deleted file mode 100644 index 2f82616b2..000000000 --- a/src/test/ui/pattern/issue-72565.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: `&dyn PartialEq<u32>` cannot be used in patterns - --> $DIR/issue-72565.rs:6:9 - | -LL | F => panic!(), - | ^ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/issue-72574-1.rs b/src/test/ui/pattern/issue-72574-1.rs deleted file mode 100644 index 1b80a2179..000000000 --- a/src/test/ui/pattern/issue-72574-1.rs +++ /dev/null @@ -1,10 +0,0 @@ -fn main() { - let x = (1, 2, 3); - match x { - (_a, _x @ ..) => {} - _ => {} - } -} -//~^^^^ ERROR `_x @` is not allowed in a tuple -//~| ERROR: `..` patterns are not allowed here -//~| ERROR: mismatched types diff --git a/src/test/ui/pattern/issue-72574-1.stderr b/src/test/ui/pattern/issue-72574-1.stderr deleted file mode 100644 index 653869a23..000000000 --- a/src/test/ui/pattern/issue-72574-1.stderr +++ /dev/null @@ -1,34 +0,0 @@ -error: `_x @` is not allowed in a tuple - --> $DIR/issue-72574-1.rs:4:14 - | -LL | (_a, _x @ ..) => {} - | ^^^^^^^ this is only allowed in slice patterns - | - = help: remove this and bind each tuple field independently -help: if you don't need to use the contents of _x, discard the tuple's remaining fields - | -LL | (_a, ..) => {} - | ~~ - -error: `..` patterns are not allowed here - --> $DIR/issue-72574-1.rs:4:19 - | -LL | (_a, _x @ ..) => {} - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error[E0308]: mismatched types - --> $DIR/issue-72574-1.rs:4:9 - | -LL | match x { - | - this expression has type `({integer}, {integer}, {integer})` -LL | (_a, _x @ ..) => {} - | ^^^^^^^^^^^^^ expected a tuple with 3 elements, found one with 2 elements - | - = note: expected tuple `({integer}, {integer}, {integer})` - found tuple `(_, _)` - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/pattern/issue-72574-2.rs b/src/test/ui/pattern/issue-72574-2.rs deleted file mode 100644 index 0ad2db848..000000000 --- a/src/test/ui/pattern/issue-72574-2.rs +++ /dev/null @@ -1,12 +0,0 @@ -struct Binder(i32, i32, i32); - -fn main() { - let x = Binder(1, 2, 3); - match x { - Binder(_a, _x @ ..) => {} - _ => {} - } -} -//~^^^^ ERROR `_x @` is not allowed in a tuple struct -//~| ERROR: `..` patterns are not allowed here -//~| ERROR: this pattern has 2 fields, but the corresponding tuple struct has 3 fields diff --git a/src/test/ui/pattern/issue-72574-2.stderr b/src/test/ui/pattern/issue-72574-2.stderr deleted file mode 100644 index 05650f05c..000000000 --- a/src/test/ui/pattern/issue-72574-2.stderr +++ /dev/null @@ -1,37 +0,0 @@ -error: `_x @` is not allowed in a tuple struct - --> $DIR/issue-72574-2.rs:6:20 - | -LL | Binder(_a, _x @ ..) => {} - | ^^^^^^^ this is only allowed in slice patterns - | - = help: remove this and bind each tuple field independently -help: if you don't need to use the contents of _x, discard the tuple's remaining fields - | -LL | Binder(_a, ..) => {} - | ~~ - -error: `..` patterns are not allowed here - --> $DIR/issue-72574-2.rs:6:25 - | -LL | Binder(_a, _x @ ..) => {} - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has 3 fields - --> $DIR/issue-72574-2.rs:6:16 - | -LL | struct Binder(i32, i32, i32); - | --- --- --- tuple struct has 3 fields -... -LL | Binder(_a, _x @ ..) => {} - | ^^ ^^^^^^^ expected 3 fields, found 2 - | -help: use `_` to explicitly ignore each field - | -LL | Binder(_a, _x @ .., _) => {} - | +++ - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0023`. diff --git a/src/test/ui/pattern/issue-74539.rs b/src/test/ui/pattern/issue-74539.rs deleted file mode 100644 index 0b25f87ec..000000000 --- a/src/test/ui/pattern/issue-74539.rs +++ /dev/null @@ -1,15 +0,0 @@ -enum E { - A(u8, u8), -} - -fn main() { - let e = E::A(2, 3); - match e { - E::A(x @ ..) => { - //~^ ERROR: `x @` is not allowed in a tuple struct - //~| ERROR: `..` patterns are not allowed here - //~| ERROR: this pattern has 1 field, but the corresponding tuple variant has 2 fields - x - } - }; -} diff --git a/src/test/ui/pattern/issue-74539.stderr b/src/test/ui/pattern/issue-74539.stderr deleted file mode 100644 index 7443946c0..000000000 --- a/src/test/ui/pattern/issue-74539.stderr +++ /dev/null @@ -1,37 +0,0 @@ -error: `x @` is not allowed in a tuple struct - --> $DIR/issue-74539.rs:8:14 - | -LL | E::A(x @ ..) => { - | ^^^^^^ this is only allowed in slice patterns - | - = help: remove this and bind each tuple field independently -help: if you don't need to use the contents of x, discard the tuple's remaining fields - | -LL | E::A(..) => { - | ~~ - -error: `..` patterns are not allowed here - --> $DIR/issue-74539.rs:8:18 - | -LL | E::A(x @ ..) => { - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 2 fields - --> $DIR/issue-74539.rs:8:14 - | -LL | A(u8, u8), - | -- -- tuple variant has 2 fields -... -LL | E::A(x @ ..) => { - | ^^^^^^ expected 2 fields, found 1 - | -help: use `_` to explicitly ignore each field - | -LL | E::A(x @ .., _) => { - | +++ - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0023`. diff --git a/src/test/ui/pattern/issue-74702.rs b/src/test/ui/pattern/issue-74702.rs deleted file mode 100644 index 0aeb3b217..000000000 --- a/src/test/ui/pattern/issue-74702.rs +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - let (foo @ ..,) = (0, 0); - //~^ ERROR: `foo @` is not allowed in a tuple - //~| ERROR: `..` patterns are not allowed here - //~| ERROR: mismatched types - dbg!(foo); -} diff --git a/src/test/ui/pattern/issue-74702.stderr b/src/test/ui/pattern/issue-74702.stderr deleted file mode 100644 index f2e2c8f02..000000000 --- a/src/test/ui/pattern/issue-74702.stderr +++ /dev/null @@ -1,34 +0,0 @@ -error: `foo @` is not allowed in a tuple - --> $DIR/issue-74702.rs:2:10 - | -LL | let (foo @ ..,) = (0, 0); - | ^^^^^^^^ this is only allowed in slice patterns - | - = help: remove this and bind each tuple field independently -help: if you don't need to use the contents of foo, discard the tuple's remaining fields - | -LL | let (..,) = (0, 0); - | ~~ - -error: `..` patterns are not allowed here - --> $DIR/issue-74702.rs:2:16 - | -LL | let (foo @ ..,) = (0, 0); - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error[E0308]: mismatched types - --> $DIR/issue-74702.rs:2:9 - | -LL | let (foo @ ..,) = (0, 0); - | ^^^^^^^^^^^ ------ this expression has type `({integer}, {integer})` - | | - | expected a tuple with 2 elements, found one with 1 element - | - = note: expected tuple `({integer}, {integer})` - found tuple `(_,)` - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/pattern/issue-74954.rs b/src/test/ui/pattern/issue-74954.rs deleted file mode 100644 index 269ec3c7a..000000000 --- a/src/test/ui/pattern/issue-74954.rs +++ /dev/null @@ -1,7 +0,0 @@ -// check-pass - -fn main() { - if let Some([b'@', filename @ ..]) = Some(b"@abc123") { - println!("filename {:?}", filename); - } -} diff --git a/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.rs b/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.rs deleted file mode 100644 index a5e9b1db5..000000000 --- a/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.rs +++ /dev/null @@ -1,9 +0,0 @@ -// Regression test for correct pretty-printing of an AST representing `&(mut x)` in help -// suggestion diagnostic. - -fn main() { - let mut &x = &0; - //~^ ERROR `mut` must be attached to each individual binding - //~| HELP add `mut` to each binding - //~| SUGGESTION &(mut x) -} diff --git a/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.stderr b/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.stderr deleted file mode 100644 index 75b6c163b..000000000 --- a/src/test/ui/pattern/issue-80186-mut-binding-help-suggestion.stderr +++ /dev/null @@ -1,10 +0,0 @@ -error: `mut` must be attached to each individual binding - --> $DIR/issue-80186-mut-binding-help-suggestion.rs:5:9 - | -LL | let mut &x = &0; - | ^^^^^^ help: add `mut` to each binding: `&(mut x)` - | - = note: `mut` may be followed by `variable` and `variable @ pattern` - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/issue-8351-1.rs b/src/test/ui/pattern/issue-8351-1.rs deleted file mode 100644 index 139f027cb..000000000 --- a/src/test/ui/pattern/issue-8351-1.rs +++ /dev/null @@ -1,16 +0,0 @@ -// run-pass -#![allow(dead_code)] - -enum E { - Foo{f: isize}, - Bar, -} - -pub fn main() { - let e = E::Foo{f: 0}; - match e { - E::Foo{f: 1} => panic!(), - E::Foo{..} => (), - _ => panic!(), - } -} diff --git a/src/test/ui/pattern/issue-8351-2.rs b/src/test/ui/pattern/issue-8351-2.rs deleted file mode 100644 index bc66cbb77..000000000 --- a/src/test/ui/pattern/issue-8351-2.rs +++ /dev/null @@ -1,16 +0,0 @@ -// run-pass -#![allow(dead_code)] - -enum E { - Foo{f: isize, b: bool}, - Bar, -} - -pub fn main() { - let e = E::Foo{f: 0, b: false}; - match e { - E::Foo{f: 1, b: true} => panic!(), - E::Foo{b: false, f: 0} => (), - _ => panic!(), - } -} diff --git a/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.rs b/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.rs deleted file mode 100644 index 16df272df..000000000 --- a/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.rs +++ /dev/null @@ -1,28 +0,0 @@ -trait Zero { - const ZERO: Self; -} - -impl Zero for String { - const ZERO: Self = String::new(); -} - -fn foo() { - match String::new() { - Zero::ZERO ..= Zero::ZERO => {}, - //~^ ERROR only `char` and numeric types are allowed in range patterns - _ => {}, - } -} - -fn bar() { - match Zero::ZERO { - Zero::ZERO ..= Zero::ZERO => {}, - //~^ ERROR type annotations needed [E0282] - _ => {}, - } -} - -fn main() { - foo(); - bar(); -} diff --git a/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.stderr b/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.stderr deleted file mode 100644 index 8e528f8c1..000000000 --- a/src/test/ui/pattern/issue-88074-pat-range-type-inference-err.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0029]: only `char` and numeric types are allowed in range patterns - --> $DIR/issue-88074-pat-range-type-inference-err.rs:11:9 - | -LL | Zero::ZERO ..= Zero::ZERO => {}, - | ----------^^^^^---------- - | | | - | | this is of type `String` but it should be `char` or numeric - | this is of type `String` but it should be `char` or numeric - -error[E0282]: type annotations needed - --> $DIR/issue-88074-pat-range-type-inference-err.rs:19:9 - | -LL | Zero::ZERO ..= Zero::ZERO => {}, - | ^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type - -error: aborting due to 2 previous errors - -Some errors have detailed explanations: E0029, E0282. -For more information about an error, try `rustc --explain E0029`. diff --git a/src/test/ui/pattern/issue-88074-pat-range-type-inference.rs b/src/test/ui/pattern/issue-88074-pat-range-type-inference.rs deleted file mode 100644 index 27db7d8c7..000000000 --- a/src/test/ui/pattern/issue-88074-pat-range-type-inference.rs +++ /dev/null @@ -1,16 +0,0 @@ -// check-pass - -trait Zero { - const ZERO: Self; -} - -impl Zero for i32 { - const ZERO: Self = 0; -} - -fn main() { - match 1 { - Zero::ZERO ..= 1 => {}, - _ => {}, - } -} diff --git a/src/test/ui/pattern/issue-92074-macro-ice.rs b/src/test/ui/pattern/issue-92074-macro-ice.rs deleted file mode 100644 index 039d3b314..000000000 --- a/src/test/ui/pattern/issue-92074-macro-ice.rs +++ /dev/null @@ -1,36 +0,0 @@ -pub enum En { - A(Vec<u8>) -} - -fn get_usize() -> usize { - 0 -} - -macro_rules! force_expr { - ($e:expr) => { $e } -} - -macro_rules! force_pat { - ($a:expr, $b:expr) => { $a..=$b } -} - -macro_rules! make_vec { - () => { force_expr!(Vec::new()) } //~ ERROR arbitrary expressions aren't allowed -} - -macro_rules! make_pat { - () => { force_pat!(get_usize(), get_usize()) } - //~^ ERROR arbitrary expressions aren't allowed - //~| ERROR arbitrary expressions aren't allowed -} - -#[allow(unreachable_code)] -fn f() -> Result<(), impl core::fmt::Debug> { - let x: En = loop {}; - - assert!(matches!(x, En::A(make_vec!()))); - assert!(matches!(5, make_pat!())); - Ok::<(), &'static str>(()) -} - -fn main() {} diff --git a/src/test/ui/pattern/issue-92074-macro-ice.stderr b/src/test/ui/pattern/issue-92074-macro-ice.stderr deleted file mode 100644 index b340afff0..000000000 --- a/src/test/ui/pattern/issue-92074-macro-ice.stderr +++ /dev/null @@ -1,35 +0,0 @@ -error: arbitrary expressions aren't allowed in patterns - --> $DIR/issue-92074-macro-ice.rs:18:25 - | -LL | () => { force_expr!(Vec::new()) } - | ^^^^^^^^^^ -... -LL | assert!(matches!(x, En::A(make_vec!()))); - | ----------- in this macro invocation - | - = note: this error originates in the macro `make_vec` (in Nightly builds, run with -Z macro-backtrace for more info) - -error: arbitrary expressions aren't allowed in patterns - --> $DIR/issue-92074-macro-ice.rs:22:24 - | -LL | () => { force_pat!(get_usize(), get_usize()) } - | ^^^^^^^^^^^ -... -LL | assert!(matches!(5, make_pat!())); - | ----------- in this macro invocation - | - = note: this error originates in the macro `make_pat` (in Nightly builds, run with -Z macro-backtrace for more info) - -error: arbitrary expressions aren't allowed in patterns - --> $DIR/issue-92074-macro-ice.rs:22:37 - | -LL | () => { force_pat!(get_usize(), get_usize()) } - | ^^^^^^^^^^^ -... -LL | assert!(matches!(5, make_pat!())); - | ----------- in this macro invocation - | - = note: this error originates in the macro `make_pat` (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to 3 previous errors - diff --git a/src/test/ui/pattern/issue-95878.rs b/src/test/ui/pattern/issue-95878.rs deleted file mode 100644 index f59814468..000000000 --- a/src/test/ui/pattern/issue-95878.rs +++ /dev/null @@ -1,12 +0,0 @@ -struct Foo<'a>(&'a ()); - -impl<'a> Foo<'a> { - fn spam(&mut self, baz: &mut Vec<u32>) { - match 15 { - ref Self => (), - //~^ ERROR expected identifier, found keyword `Self` - } - } -} - -fn main() {} diff --git a/src/test/ui/pattern/issue-95878.stderr b/src/test/ui/pattern/issue-95878.stderr deleted file mode 100644 index e0eea06e0..000000000 --- a/src/test/ui/pattern/issue-95878.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: expected identifier, found keyword `Self` - --> $DIR/issue-95878.rs:6:17 - | -LL | ref Self => (), - | ^^^^ expected identifier, found keyword - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern-pass.rs b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern-pass.rs deleted file mode 100644 index 5445696fd..000000000 --- a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern-pass.rs +++ /dev/null @@ -1,29 +0,0 @@ -// check-pass - -fn main() {} - -struct U; - -fn slice() { - let mut arr = [U, U, U, U, U, U, U, U]; - let [ref _x0, _x1, _, mut _x3, .., ref _x6, _x7] = arr; - _x3 = U; - let [ref mut _x0, _, ref _x2, _, _x4, ref mut _x5, _x6, _] = arr; - *_x5 = U; - let [_, _, _x2, _, _, _x5, _, _] = arr; - *_x0 = U; - let [ref _x0, ..] = arr; - let [_x0, ..] = arr; -} - -fn tuple() { - let mut tup = (U, U, U, U, U); - let (ref _x0, mut _x1, ref _x2, ..) = tup; - _x1 = U; - let (ref mut _x0, _, _, ref _x3, _x4) = tup; - let (_, _, _, _x3, _) = tup; - *_x0 = U; - drop(_x2); - drop(tup.2); - let (_x0, _, _, ..) = tup; -} diff --git a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs deleted file mode 100644 index a6144c949..000000000 --- a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.rs +++ /dev/null @@ -1,48 +0,0 @@ -fn main() {} - -struct U; - -fn slice() { - let mut arr = [U, U, U, U, U]; - let hold_all = &arr; - let [ref _x0_hold, _x1, ref xs_hold @ ..] = arr; //~ ERROR cannot move out of `arr[..]` - _x1 = U; //~ ERROR cannot assign twice to immutable variable `_x1` - drop(hold_all); - let [_x0, ..] = arr; //~ ERROR cannot move out of `arr[..]` - drop(_x0_hold); - let [_, _, ref mut _x2, _x3, mut _x4] = arr; - //~^ ERROR cannot borrow `arr[..]` as mutable - //~| ERROR cannot move out of `arr[..]` because it is borrowed - //~| ERROR cannot move out of `arr[..]` because it is borrowed - drop(xs_hold); -} - -fn tuple() { - let mut tup = (U, U, U, U); - let (ref _x0, _x1, ref _x2, ..) = tup; - _x1 = U; //~ ERROR cannot assign twice to immutable variable - let _x0_hold = &mut tup.0; //~ ERROR cannot borrow `tup.0` as mutable because it is also - let (ref mut _x0_hold, ..) = tup; //~ ERROR cannot borrow `tup.0` as mutable because it is also - *_x0 = U; //~ ERROR cannot assign to `*_x0`, which is behind a `&` reference - *_x2 = U; //~ ERROR cannot assign to `*_x2`, which is behind a `&` reference - drop(tup.1); //~ ERROR use of moved value: `tup.1` - let _x1_hold = &tup.1; //~ ERROR borrow of moved value: `tup.1` - let (.., ref mut _x3) = tup; - let _x3_hold = &tup.3; //~ ERROR cannot borrow `tup.3` as immutable - let _x3_hold = &mut tup.3; //~ ERROR cannot borrow `tup.3` as mutable more - let (.., ref mut _x4_hold) = tup; //~ ERROR cannot borrow `tup.3` as mutable more - let (.., ref _x4_hold) = tup; //~ ERROR cannot borrow `tup.3` as immutable - drop(_x3); -} - -fn closure() { - let mut tup = (U, U, U); - let c1 = || { - let (ref _x0, _x1, _) = tup; - }; - let c2 = || { - //~^ ERROR use of moved value - let (ref mut _x0, _, _x2) = tup; - }; - drop(c1); -} diff --git a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.stderr b/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.stderr deleted file mode 100644 index bb7b81836..000000000 --- a/src/test/ui/pattern/move-ref-patterns/borrowck-move-ref-pattern.stderr +++ /dev/null @@ -1,212 +0,0 @@ -error[E0505]: cannot move out of `arr[..]` because it is borrowed - --> $DIR/borrowck-move-ref-pattern.rs:8:24 - | -LL | let hold_all = &arr; - | ---- borrow of `arr` occurs here -LL | let [ref _x0_hold, _x1, ref xs_hold @ ..] = arr; - | ^^^ move out of `arr[..]` occurs here -LL | _x1 = U; -LL | drop(hold_all); - | -------- borrow later used here - -error[E0384]: cannot assign twice to immutable variable `_x1` - --> $DIR/borrowck-move-ref-pattern.rs:9:5 - | -LL | let [ref _x0_hold, _x1, ref xs_hold @ ..] = arr; - | --- - | | - | first assignment to `_x1` - | help: consider making this binding mutable: `mut _x1` -LL | _x1 = U; - | ^^^^^^^ cannot assign twice to immutable variable - -error[E0505]: cannot move out of `arr[..]` because it is borrowed - --> $DIR/borrowck-move-ref-pattern.rs:11:10 - | -LL | let [ref _x0_hold, _x1, ref xs_hold @ ..] = arr; - | ------------ borrow of `arr[..]` occurs here -... -LL | let [_x0, ..] = arr; - | ^^^ move out of `arr[..]` occurs here -LL | drop(_x0_hold); - | -------- borrow later used here - -error[E0502]: cannot borrow `arr[..]` as mutable because it is also borrowed as immutable - --> $DIR/borrowck-move-ref-pattern.rs:13:16 - | -LL | let [ref _x0_hold, _x1, ref xs_hold @ ..] = arr; - | ----------- immutable borrow occurs here -... -LL | let [_, _, ref mut _x2, _x3, mut _x4] = arr; - | ^^^^^^^^^^^ mutable borrow occurs here -... -LL | drop(xs_hold); - | ------- immutable borrow later used here - -error[E0505]: cannot move out of `arr[..]` because it is borrowed - --> $DIR/borrowck-move-ref-pattern.rs:13:29 - | -LL | let [ref _x0_hold, _x1, ref xs_hold @ ..] = arr; - | ----------- borrow of `arr[..]` occurs here -... -LL | let [_, _, ref mut _x2, _x3, mut _x4] = arr; - | ^^^ move out of `arr[..]` occurs here -... -LL | drop(xs_hold); - | ------- borrow later used here - -error[E0505]: cannot move out of `arr[..]` because it is borrowed - --> $DIR/borrowck-move-ref-pattern.rs:13:34 - | -LL | let [ref _x0_hold, _x1, ref xs_hold @ ..] = arr; - | ----------- borrow of `arr[..]` occurs here -... -LL | let [_, _, ref mut _x2, _x3, mut _x4] = arr; - | ^^^^^^^ move out of `arr[..]` occurs here -... -LL | drop(xs_hold); - | ------- borrow later used here - -error[E0384]: cannot assign twice to immutable variable `_x1` - --> $DIR/borrowck-move-ref-pattern.rs:23:5 - | -LL | let (ref _x0, _x1, ref _x2, ..) = tup; - | --- - | | - | first assignment to `_x1` - | help: consider making this binding mutable: `mut _x1` -LL | _x1 = U; - | ^^^^^^^ cannot assign twice to immutable variable - -error[E0502]: cannot borrow `tup.0` as mutable because it is also borrowed as immutable - --> $DIR/borrowck-move-ref-pattern.rs:24:20 - | -LL | let (ref _x0, _x1, ref _x2, ..) = tup; - | ------- immutable borrow occurs here -LL | _x1 = U; -LL | let _x0_hold = &mut tup.0; - | ^^^^^^^^^^ mutable borrow occurs here -LL | let (ref mut _x0_hold, ..) = tup; -LL | *_x0 = U; - | -------- immutable borrow later used here - -error[E0502]: cannot borrow `tup.0` as mutable because it is also borrowed as immutable - --> $DIR/borrowck-move-ref-pattern.rs:25:10 - | -LL | let (ref _x0, _x1, ref _x2, ..) = tup; - | ------- immutable borrow occurs here -... -LL | let (ref mut _x0_hold, ..) = tup; - | ^^^^^^^^^^^^^^^^ mutable borrow occurs here -LL | *_x0 = U; - | -------- immutable borrow later used here - -error[E0594]: cannot assign to `*_x0`, which is behind a `&` reference - --> $DIR/borrowck-move-ref-pattern.rs:26:5 - | -LL | let (ref _x0, _x1, ref _x2, ..) = tup; - | ------- help: consider changing this to be a mutable reference: `ref mut _x0` -... -LL | *_x0 = U; - | ^^^^^^^^ `_x0` is a `&` reference, so the data it refers to cannot be written - -error[E0594]: cannot assign to `*_x2`, which is behind a `&` reference - --> $DIR/borrowck-move-ref-pattern.rs:27:5 - | -LL | let (ref _x0, _x1, ref _x2, ..) = tup; - | ------- help: consider changing this to be a mutable reference: `ref mut _x2` -... -LL | *_x2 = U; - | ^^^^^^^^ `_x2` is a `&` reference, so the data it refers to cannot be written - -error[E0382]: use of moved value: `tup.1` - --> $DIR/borrowck-move-ref-pattern.rs:28:10 - | -LL | let (ref _x0, _x1, ref _x2, ..) = tup; - | --- value moved here -... -LL | drop(tup.1); - | ^^^^^ value used here after move - | - = note: move occurs because `tup.1` has type `U`, which does not implement the `Copy` trait -help: borrow this binding in the pattern to avoid moving the value - | -LL | let (ref _x0, ref _x1, ref _x2, ..) = tup; - | +++ - -error[E0382]: borrow of moved value: `tup.1` - --> $DIR/borrowck-move-ref-pattern.rs:29:20 - | -LL | drop(tup.1); - | ----- value moved here -LL | let _x1_hold = &tup.1; - | ^^^^^^ value borrowed here after move - | - = note: move occurs because `tup.1` has type `U`, which does not implement the `Copy` trait - -error[E0502]: cannot borrow `tup.3` as immutable because it is also borrowed as mutable - --> $DIR/borrowck-move-ref-pattern.rs:31:20 - | -LL | let (.., ref mut _x3) = tup; - | ----------- mutable borrow occurs here -LL | let _x3_hold = &tup.3; - | ^^^^^^ immutable borrow occurs here -... -LL | drop(_x3); - | --- mutable borrow later used here - -error[E0499]: cannot borrow `tup.3` as mutable more than once at a time - --> $DIR/borrowck-move-ref-pattern.rs:32:20 - | -LL | let (.., ref mut _x3) = tup; - | ----------- first mutable borrow occurs here -LL | let _x3_hold = &tup.3; -LL | let _x3_hold = &mut tup.3; - | ^^^^^^^^^^ second mutable borrow occurs here -... -LL | drop(_x3); - | --- first borrow later used here - -error[E0499]: cannot borrow `tup.3` as mutable more than once at a time - --> $DIR/borrowck-move-ref-pattern.rs:33:14 - | -LL | let (.., ref mut _x3) = tup; - | ----------- first mutable borrow occurs here -... -LL | let (.., ref mut _x4_hold) = tup; - | ^^^^^^^^^^^^^^^^ second mutable borrow occurs here -LL | let (.., ref _x4_hold) = tup; -LL | drop(_x3); - | --- first borrow later used here - -error[E0502]: cannot borrow `tup.3` as immutable because it is also borrowed as mutable - --> $DIR/borrowck-move-ref-pattern.rs:34:14 - | -LL | let (.., ref mut _x3) = tup; - | ----------- mutable borrow occurs here -... -LL | let (.., ref _x4_hold) = tup; - | ^^^^^^^^^^^^ immutable borrow occurs here -LL | drop(_x3); - | --- mutable borrow later used here - -error[E0382]: use of moved value: `tup` - --> $DIR/borrowck-move-ref-pattern.rs:43:14 - | -LL | let mut tup = (U, U, U); - | ------- move occurs because `tup` has type `(U, U, U)`, which does not implement the `Copy` trait -LL | let c1 = || { - | -- value moved into closure here -LL | let (ref _x0, _x1, _) = tup; - | --- variable moved due to use in closure -LL | }; -LL | let c2 = || { - | ^^ value used here after move -LL | -LL | let (ref mut _x0, _, _x2) = tup; - | --- use occurs due to use in closure - -error: aborting due to 18 previous errors - -Some errors have detailed explanations: E0382, E0384, E0499, E0502, E0505, E0594. -For more information about an error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/move-ref-patterns/by-move-sub-pat-unreachable.rs b/src/test/ui/pattern/move-ref-patterns/by-move-sub-pat-unreachable.rs deleted file mode 100644 index ff7b625a6..000000000 --- a/src/test/ui/pattern/move-ref-patterns/by-move-sub-pat-unreachable.rs +++ /dev/null @@ -1,12 +0,0 @@ -// When conflicts between by-move bindings in `by_move_1 @ has_by_move` patterns -// happen and that code is unreachable according to borrowck, we accept this code. -// In particular, we want to ensure here that an ICE does not happen, which it did originally. - -// check-pass - -fn main() { - return; - - struct S; - let a @ (b, c) = (S, S); -} diff --git a/src/test/ui/pattern/move-ref-patterns/issue-53840.rs b/src/test/ui/pattern/move-ref-patterns/issue-53840.rs deleted file mode 100644 index 80effc497..000000000 --- a/src/test/ui/pattern/move-ref-patterns/issue-53840.rs +++ /dev/null @@ -1,20 +0,0 @@ -// check-pass - -enum E { - Foo(String, String, String), -} - -struct Bar { - a: String, - b: String, -} - -fn main() { - let bar = Bar { a: "1".to_string(), b: "2".to_string() }; - match E::Foo("".into(), "".into(), "".into()) { - E::Foo(a, b, ref c) => {} - } - match bar { - Bar { a, ref b } => {} - } -} diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-inside.rs b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-inside.rs deleted file mode 100644 index ebb1683af..000000000 --- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-inside.rs +++ /dev/null @@ -1,120 +0,0 @@ -fn main() { - struct S; // Not `Copy`. - - let mut tup0 = (S, S); - let mut tup1 = (S, S, S); - let tup2 = (S, S); - let tup3 = (S, S, S); - let tup4 = (S, S); - let mut arr0 = [S, S, S]; - let mut arr1 = [S, S, S, S, S]; - let arr2 = [S, S, S]; - let arr3 = [S, S, S, S, S]; - - // The `mov` bindings require that we capture the scrutinees by-move. - let mut closure = || { - // Tuples... - let (ref mut borrow, mov) = tup0; - let (mov, _, ref mut borrow) = tup1; - let (ref borrow, mov) = tup2; - let (mov, _, ref borrow) = tup3; - let (ref borrow, mov) = tup4; - // Arrays... - let [mov @ .., ref borrow] = arr0; - let [_, ref mut borrow @ .., _, mov] = arr1; - let [mov @ .., ref borrow] = arr2; - let [_, ref borrow @ .., _, mov] = arr3; - }; - - // Now we try to borrow and move the captures, which should result in errors... - // ...for tuples: - drop(&tup0); //~ ERROR borrow of moved value: `tup0` - drop(&tup1); //~ ERROR borrow of moved value: `tup1` - drop(&tup2); //~ ERROR borrow of moved value: `tup2` - drop(&tup3); //~ ERROR borrow of moved value: `tup3` - // Ostensibly this should compile. - // However, because closures don't capture individual fields, which is changed in RFC 2229, - // this won't compile because the entire product is moved into the closure. - // The same applies to the array patterns below. - drop(&tup4.0); //~ ERROR borrow of moved value: `tup4` - // ...for arrays: - drop(&arr0); //~ ERROR borrow of moved value: `arr0` - let [_, mov1, mov2, mov3, _] = &arr1; //~ ERROR borrow of moved value: `arr1` - drop(&arr2); //~ ERROR borrow of moved value: `arr2` - let [_, mov1, mov2, mov3, _] = &arr3; //~ ERROR borrow of moved value: `arr3` - - // Let's redo ^--- with a `match` + sum type: - macro_rules! m { - ($p:pat = $s:expr) => { - match $s { - Some($p) => {} - _ => {} - } - }; - } - let mut tup0: Option<(S, S)> = None; - let mut tup1: Option<(S, S, S)> = None; - let tup2: Option<(S, S)> = None; - let tup3: Option<(S, S, S)> = None; - let tup4: Option<(S, S)> = None; - let mut arr0: Option<[S; 3]> = None; - let mut arr1: Option<[S; 5]> = None; - let arr2: Option<[S; 3]> = None; - let arr3: Option<[S; 5]> = None; - let mut closure = || { - m!((ref mut borrow, mov) = tup0); - m!((mov, _, ref mut borrow) = tup1); - m!((ref borrow, mov) = tup2); - m!((mov, _, ref borrow) = tup3); - m!((ref borrow, mov) = tup4); - m!([mov @ .., ref borrow] = arr0); - m!([_, ref mut borrow @ .., _, mov] = arr1); - m!([mov @ .., ref borrow] = arr2); - m!([_, ref borrow @ .., _, mov] = arr3); - }; - drop(&tup0); //~ ERROR borrow of moved value: `tup0` - drop(&tup1); //~ ERROR borrow of moved value: `tup1` - drop(&tup2); //~ ERROR borrow of moved value: `tup2` - drop(&tup3); //~ ERROR borrow of moved value: `tup3` - m!((ref x, _) = &tup4); //~ ERROR borrow of moved value: `tup4` - drop(&arr0); //~ ERROR borrow of moved value: `arr0` - m!([_, mov1, mov2, mov3, _] = &arr1); //~ ERROR borrow of moved value: `arr1` - drop(&arr2); //~ ERROR borrow of moved value: `arr2` - m!([_, mov1, mov2, mov3, _] = &arr3); //~ ERROR borrow of moved value: `arr3` - - // Let's redo ^--- with `if let` (which may diverge from `match` in the future): - macro_rules! m { - ($p:pat = $s:expr) => { - if let Some($p) = $s {} - }; - } - let mut tup0: Option<(S, S)> = None; - let mut tup1: Option<(S, S, S)> = None; - let tup2: Option<(S, S)> = None; - let tup3: Option<(S, S, S)> = None; - let tup4: Option<(S, S)> = None; - let mut arr0: Option<[S; 3]> = None; - let mut arr1: Option<[S; 5]> = None; - let arr2: Option<[S; 3]> = None; - let arr3: Option<[S; 5]> = None; - let mut closure = || { - m!((ref mut borrow, mov) = tup0); - m!((mov, _, ref mut borrow) = tup1); - m!((ref borrow, mov) = tup2); - m!((mov, _, ref borrow) = tup3); - m!((ref borrow, mov) = tup4); - m!([mov @ .., ref borrow] = arr0); - m!([_, ref mut borrow @ .., _, mov] = arr1); - m!([mov @ .., ref borrow] = arr2); - m!([_, ref borrow @ .., _, mov] = arr3); - }; - drop(&tup0); //~ ERROR borrow of moved value: `tup0` - drop(&tup1); //~ ERROR borrow of moved value: `tup1` - drop(&tup2); //~ ERROR borrow of moved value: `tup2` - drop(&tup3); //~ ERROR borrow of moved value: `tup3` - m!((ref x, _) = &tup4); //~ ERROR borrow of moved value: `tup4` - drop(&arr0); //~ ERROR borrow of moved value: `arr0` - m!([_, mov1, mov2, mov3, _] = &arr1); //~ ERROR borrow of moved value: `arr1` - drop(&arr2); //~ ERROR borrow of moved value: `arr2` - m!([_, mov1, mov2, mov3, _] = &arr3); //~ ERROR borrow of moved value: `arr3` -} diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-inside.stderr b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-inside.stderr deleted file mode 100644 index f19fed089..000000000 --- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-inside.stderr +++ /dev/null @@ -1,404 +0,0 @@ -error[E0382]: borrow of moved value: `tup0` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:31:10 - | -LL | let mut tup0 = (S, S); - | -------- move occurs because `tup0` has type `(S, S)`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -LL | // Tuples... -LL | let (ref mut borrow, mov) = tup0; - | ---- variable moved due to use in closure -... -LL | drop(&tup0); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup1` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:32:10 - | -LL | let mut tup1 = (S, S, S); - | -------- move occurs because `tup1` has type `(S, S, S)`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | let (mov, _, ref mut borrow) = tup1; - | ---- variable moved due to use in closure -... -LL | drop(&tup1); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup2` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:33:10 - | -LL | let tup2 = (S, S); - | ---- move occurs because `tup2` has type `(S, S)`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | let (ref borrow, mov) = tup2; - | ---- variable moved due to use in closure -... -LL | drop(&tup2); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup3` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:34:10 - | -LL | let tup3 = (S, S, S); - | ---- move occurs because `tup3` has type `(S, S, S)`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | let (mov, _, ref borrow) = tup3; - | ---- variable moved due to use in closure -... -LL | drop(&tup3); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup4` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:39:10 - | -LL | let tup4 = (S, S); - | ---- move occurs because `tup4` has type `(S, S)`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | let (ref borrow, mov) = tup4; - | ---- variable moved due to use in closure -... -LL | drop(&tup4.0); - | ^^^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr0` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:41:10 - | -LL | let mut arr0 = [S, S, S]; - | -------- move occurs because `arr0` has type `[S; 3]`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | let [mov @ .., ref borrow] = arr0; - | ---- variable moved due to use in closure -... -LL | drop(&arr0); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr1` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:42:36 - | -LL | let mut arr1 = [S, S, S, S, S]; - | -------- move occurs because `arr1` has type `[S; 5]`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | let [_, ref mut borrow @ .., _, mov] = arr1; - | ---- variable moved due to use in closure -... -LL | let [_, mov1, mov2, mov3, _] = &arr1; - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr2` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:43:10 - | -LL | let arr2 = [S, S, S]; - | ---- move occurs because `arr2` has type `[S; 3]`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | let [mov @ .., ref borrow] = arr2; - | ---- variable moved due to use in closure -... -LL | drop(&arr2); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr3` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:44:36 - | -LL | let arr3 = [S, S, S, S, S]; - | ---- move occurs because `arr3` has type `[S; 5]`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | let [_, ref borrow @ .., _, mov] = arr3; - | ---- variable moved due to use in closure -... -LL | let [_, mov1, mov2, mov3, _] = &arr3; - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup0` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:75:10 - | -LL | let mut tup0: Option<(S, S)> = None; - | -------- move occurs because `tup0` has type `Option<(S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -LL | m!((ref mut borrow, mov) = tup0); - | ---- variable moved due to use in closure -... -LL | drop(&tup0); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup1` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:76:10 - | -LL | let mut tup1: Option<(S, S, S)> = None; - | -------- move occurs because `tup1` has type `Option<(S, S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -LL | m!((ref mut borrow, mov) = tup0); -LL | m!((mov, _, ref mut borrow) = tup1); - | ---- variable moved due to use in closure -... -LL | drop(&tup1); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup2` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:77:10 - | -LL | let tup2: Option<(S, S)> = None; - | ---- move occurs because `tup2` has type `Option<(S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!((ref borrow, mov) = tup2); - | ---- variable moved due to use in closure -... -LL | drop(&tup2); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup3` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:78:10 - | -LL | let tup3: Option<(S, S, S)> = None; - | ---- move occurs because `tup3` has type `Option<(S, S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!((mov, _, ref borrow) = tup3); - | ---- variable moved due to use in closure -... -LL | drop(&tup3); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup4` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:79:21 - | -LL | let tup4: Option<(S, S)> = None; - | ---- move occurs because `tup4` has type `Option<(S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!((ref borrow, mov) = tup4); - | ---- variable moved due to use in closure -... -LL | m!((ref x, _) = &tup4); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr0` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:80:10 - | -LL | let mut arr0: Option<[S; 3]> = None; - | -------- move occurs because `arr0` has type `Option<[S; 3]>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!([mov @ .., ref borrow] = arr0); - | ---- variable moved due to use in closure -... -LL | drop(&arr0); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr1` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:81:35 - | -LL | let mut arr1: Option<[S; 5]> = None; - | -------- move occurs because `arr1` has type `Option<[S; 5]>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!([_, ref mut borrow @ .., _, mov] = arr1); - | ---- variable moved due to use in closure -... -LL | m!([_, mov1, mov2, mov3, _] = &arr1); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr2` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:82:10 - | -LL | let arr2: Option<[S; 3]> = None; - | ---- move occurs because `arr2` has type `Option<[S; 3]>`, which does not implement the `Copy` trait -LL | let arr3: Option<[S; 5]> = None; -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!([mov @ .., ref borrow] = arr2); - | ---- variable moved due to use in closure -... -LL | drop(&arr2); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr3` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:83:35 - | -LL | let arr3: Option<[S; 5]> = None; - | ---- move occurs because `arr3` has type `Option<[S; 5]>`, which does not implement the `Copy` trait -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!([_, ref borrow @ .., _, mov] = arr3); - | ---- variable moved due to use in closure -... -LL | m!([_, mov1, mov2, mov3, _] = &arr3); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup0` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:111:10 - | -LL | let mut tup0: Option<(S, S)> = None; - | -------- move occurs because `tup0` has type `Option<(S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -LL | m!((ref mut borrow, mov) = tup0); - | ---- variable moved due to use in closure -... -LL | drop(&tup0); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup1` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:112:10 - | -LL | let mut tup1: Option<(S, S, S)> = None; - | -------- move occurs because `tup1` has type `Option<(S, S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -LL | m!((ref mut borrow, mov) = tup0); -LL | m!((mov, _, ref mut borrow) = tup1); - | ---- variable moved due to use in closure -... -LL | drop(&tup1); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup2` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:113:10 - | -LL | let tup2: Option<(S, S)> = None; - | ---- move occurs because `tup2` has type `Option<(S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!((ref borrow, mov) = tup2); - | ---- variable moved due to use in closure -... -LL | drop(&tup2); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup3` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:114:10 - | -LL | let tup3: Option<(S, S, S)> = None; - | ---- move occurs because `tup3` has type `Option<(S, S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!((mov, _, ref borrow) = tup3); - | ---- variable moved due to use in closure -... -LL | drop(&tup3); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `tup4` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:115:21 - | -LL | let tup4: Option<(S, S)> = None; - | ---- move occurs because `tup4` has type `Option<(S, S)>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!((ref borrow, mov) = tup4); - | ---- variable moved due to use in closure -... -LL | m!((ref x, _) = &tup4); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr0` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:116:10 - | -LL | let mut arr0: Option<[S; 3]> = None; - | -------- move occurs because `arr0` has type `Option<[S; 3]>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!([mov @ .., ref borrow] = arr0); - | ---- variable moved due to use in closure -... -LL | drop(&arr0); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr1` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:117:35 - | -LL | let mut arr1: Option<[S; 5]> = None; - | -------- move occurs because `arr1` has type `Option<[S; 5]>`, which does not implement the `Copy` trait -... -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!([_, ref mut borrow @ .., _, mov] = arr1); - | ---- variable moved due to use in closure -... -LL | m!([_, mov1, mov2, mov3, _] = &arr1); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr2` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:118:10 - | -LL | let arr2: Option<[S; 3]> = None; - | ---- move occurs because `arr2` has type `Option<[S; 3]>`, which does not implement the `Copy` trait -LL | let arr3: Option<[S; 5]> = None; -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!([mov @ .., ref borrow] = arr2); - | ---- variable moved due to use in closure -... -LL | drop(&arr2); - | ^^^^^ value borrowed here after move - -error[E0382]: borrow of moved value: `arr3` - --> $DIR/move-ref-patterns-closure-captures-inside.rs:119:35 - | -LL | let arr3: Option<[S; 5]> = None; - | ---- move occurs because `arr3` has type `Option<[S; 5]>`, which does not implement the `Copy` trait -LL | let mut closure = || { - | -- value moved into closure here -... -LL | m!([_, ref borrow @ .., _, mov] = arr3); - | ---- variable moved due to use in closure -... -LL | m!([_, mov1, mov2, mov3, _] = &arr3); - | ^^^^^ value borrowed here after move - -error: aborting due to 27 previous errors - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-pass.rs b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-pass.rs deleted file mode 100644 index 583f70f41..000000000 --- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures-pass.rs +++ /dev/null @@ -1,28 +0,0 @@ -// check-pass - -fn main() { - struct U; - fn accept_fn_once(_: impl FnOnce()) {} - fn accept_fn_mut(_: impl FnMut()) {} - fn accept_fn(_: impl Fn()) {} - - let mut tup = (U, U, U); - let (ref _x0, _x1, ref mut _x2) = tup; - let c1 = || { - drop::<&U>(_x0); - drop::<U>(_x1); - drop::<&mut U>(_x2); - }; - accept_fn_once(c1); - - let c2 = || { - drop::<&U>(_x0); - drop::<&mut U>(_x2); - }; - accept_fn_mut(c2); - - let c3 = || { - drop::<&U>(_x0); - }; - accept_fn(c3); -} diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures.rs b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures.rs deleted file mode 100644 index cd619cc41..000000000 --- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures.rs +++ /dev/null @@ -1,32 +0,0 @@ -fn main() { - struct U; - fn accept_fn_once(_: &impl FnOnce()) {} - fn accept_fn_mut(_: &impl FnMut()) {} - fn accept_fn(_: &impl Fn()) {} - - let mut tup = (U, U, U); - let (ref _x0, _x1, ref mut _x2) = tup; - let c1 = || { - //~^ ERROR expected a closure that implements the `FnMut` - //~| ERROR expected a closure that implements the `Fn` - drop::<&U>(_x0); - drop::<U>(_x1); - drop::<&mut U>(_x2); - }; - accept_fn_once(&c1); - accept_fn_mut(&c1); - accept_fn(&c1); - - let c2 = || { - //~^ ERROR expected a closure that implements the `Fn` - drop::<&U>(_x0); - drop::<&mut U>(_x2); - }; - accept_fn_mut(&c2); - accept_fn(&c2); - - let c3 = || { - drop::<&U>(_x0); - }; - accept_fn(&c3); -} diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures.stderr b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures.stderr deleted file mode 100644 index eba65a618..000000000 --- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-closure-captures.stderr +++ /dev/null @@ -1,63 +0,0 @@ -error[E0525]: expected a closure that implements the `FnMut` trait, but this closure only implements `FnOnce` - --> $DIR/move-ref-patterns-closure-captures.rs:9:14 - | -LL | let c1 = || { - | ^^ this closure implements `FnOnce`, not `FnMut` -... -LL | drop::<U>(_x1); - | --- closure is `FnOnce` because it moves the variable `_x1` out of its environment -... -LL | accept_fn_mut(&c1); - | ------------- --- the requirement to implement `FnMut` derives from here - | | - | required by a bound introduced by this call - | -note: required by a bound in `accept_fn_mut` - --> $DIR/move-ref-patterns-closure-captures.rs:4:31 - | -LL | fn accept_fn_mut(_: &impl FnMut()) {} - | ^^^^^^^ required by this bound in `accept_fn_mut` - -error[E0525]: expected a closure that implements the `Fn` trait, but this closure only implements `FnOnce` - --> $DIR/move-ref-patterns-closure-captures.rs:9:14 - | -LL | let c1 = || { - | ^^ this closure implements `FnOnce`, not `Fn` -... -LL | drop::<U>(_x1); - | --- closure is `FnOnce` because it moves the variable `_x1` out of its environment -... -LL | accept_fn(&c1); - | --------- --- the requirement to implement `Fn` derives from here - | | - | required by a bound introduced by this call - | -note: required by a bound in `accept_fn` - --> $DIR/move-ref-patterns-closure-captures.rs:5:27 - | -LL | fn accept_fn(_: &impl Fn()) {} - | ^^^^ required by this bound in `accept_fn` - -error[E0525]: expected a closure that implements the `Fn` trait, but this closure only implements `FnMut` - --> $DIR/move-ref-patterns-closure-captures.rs:20:14 - | -LL | let c2 = || { - | ^^ this closure implements `FnMut`, not `Fn` -... -LL | drop::<&mut U>(_x2); - | --- closure is `FnMut` because it mutates the variable `_x2` here -... -LL | accept_fn(&c2); - | --------- --- the requirement to implement `Fn` derives from here - | | - | required by a bound introduced by this call - | -note: required by a bound in `accept_fn` - --> $DIR/move-ref-patterns-closure-captures.rs:5:27 - | -LL | fn accept_fn(_: &impl Fn()) {} - | ^^^^ required by this bound in `accept_fn` - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0525`. diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-default-binding-modes.rs b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-default-binding-modes.rs deleted file mode 100644 index 1dd66aad5..000000000 --- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-default-binding-modes.rs +++ /dev/null @@ -1,14 +0,0 @@ -fn main() { - struct U; - - // A tuple is a "non-reference pattern". - // A `mut` binding pattern resets the binding mode to by-value. - - let p = (U, U); - let (a, mut b) = &p; - //~^ ERROR cannot move out of a shared reference - - let mut p = (U, U); - let (a, mut b) = &mut p; - //~^ ERROR cannot move out of a mutable reference -} diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-default-binding-modes.stderr b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-default-binding-modes.stderr deleted file mode 100644 index 6952c743a..000000000 --- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-default-binding-modes.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0507]: cannot move out of a shared reference - --> $DIR/move-ref-patterns-default-binding-modes.rs:8:22 - | -LL | let (a, mut b) = &p; - | ----- ^^ - | | - | data moved here - | move occurs because `b` has type `U`, which does not implement the `Copy` trait - -error[E0507]: cannot move out of a mutable reference - --> $DIR/move-ref-patterns-default-binding-modes.rs:12:22 - | -LL | let (a, mut b) = &mut p; - | ----- ^^^^^^ - | | - | data moved here - | move occurs because `b` has type `U`, which does not implement the `Copy` trait - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0507`. diff --git a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs b/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs deleted file mode 100644 index 1d6d9acea..000000000 --- a/src/test/ui/pattern/move-ref-patterns/move-ref-patterns-dynamic-semantics.rs +++ /dev/null @@ -1,79 +0,0 @@ -// run-pass - -// This test checks the dynamic semantics and drop order of pattern matching -// where a product pattern has both a by-move and by-ref binding. - -use std::cell::RefCell; -use std::rc::Rc; - -struct X { - x: Box<usize>, - d: DropOrderListPtr, -} - -type DropOrderListPtr = Rc<RefCell<Vec<usize>>>; - -impl Drop for X { - fn drop(&mut self) { - self.d.borrow_mut().push(*self.x); - } -} - -enum DoubleOption<T, U> { - Some2(T, U), - _None2, -} - -fn main() { - let d: DropOrderListPtr = <_>::default(); - { - let mk = |v| X { x: Box::new(v), d: d.clone() }; - let check = |a1: &X, a2, b1: &X, b2| { - assert_eq!(*a1.x, a2); - assert_eq!(*b1.x, b2); - }; - - let x = DoubleOption::Some2(mk(1), mk(2)); - match x { - DoubleOption::Some2(ref a, b) => check(a, 1, &b, 2), - DoubleOption::_None2 => panic!(), - } - let x = DoubleOption::Some2(mk(3), mk(4)); - match x { - DoubleOption::Some2(a, ref b) => check(&a, 3, b, 4), - DoubleOption::_None2 => panic!(), - } - match DoubleOption::Some2(mk(5), mk(6)) { - DoubleOption::Some2(ref a, b) => check(a, 5, &b, 6), - DoubleOption::_None2 => panic!(), - } - match DoubleOption::Some2(mk(7), mk(8)) { - DoubleOption::Some2(a, ref b) => check(&a, 7, b, 8), - DoubleOption::_None2 => panic!(), - } - { - let (a, ref b) = (mk(9), mk(10)); - let (ref c, d) = (mk(11), mk(12)); - check(&a, 9, b, 10); - check(c, 11, &d, 12); - } - fn fun([a, ref mut b, ref xs @ .., ref c, d]: [X; 6]) { - assert_eq!(*a.x, 13); - assert_eq!(*b.x, 14); - assert_eq!(&[*xs[0].x, *xs[1].x], &[15, 16]); - assert_eq!(*c.x, 17); - assert_eq!(*d.x, 18); - } - fun([mk(13), mk(14), mk(15), mk(16), mk(17), mk(18)]); - - let lam = |(a, ref b, c, ref mut d): (X, X, X, X)| { - assert_eq!(*a.x, 19); - assert_eq!(*b.x, 20); - assert_eq!(*c.x, 21); - assert_eq!(*d.x, 22); - }; - lam((mk(19), mk(20), mk(21), mk(22))); - } - let expected = [2, 3, 6, 5, 7, 8, 12, 11, 9, 10, 18, 13, 14, 15, 16, 17, 21, 19, 20, 22, 4, 1]; - assert_eq!(&*d.borrow(), &expected); -} diff --git a/src/test/ui/pattern/non-constant-in-const-path.rs b/src/test/ui/pattern/non-constant-in-const-path.rs deleted file mode 100644 index 3918485ba..000000000 --- a/src/test/ui/pattern/non-constant-in-const-path.rs +++ /dev/null @@ -1,18 +0,0 @@ -// Checks if we emit `PatternError`s correctly. -// This is also a regression test for #27895 and #68394. - -static FOO: u8 = 10; - -fn main() { - let x = 0; - let 0u8..=x = 0; - //~^ ERROR: runtime values cannot be referenced in patterns - let 0u8..=FOO = 0; - //~^ ERROR: statics cannot be referenced in patterns - match 1 { - 0 ..= x => {} - //~^ ERROR: runtime values cannot be referenced in patterns - 0 ..= FOO => {} - //~^ ERROR: statics cannot be referenced in patterns - }; -} diff --git a/src/test/ui/pattern/non-constant-in-const-path.stderr b/src/test/ui/pattern/non-constant-in-const-path.stderr deleted file mode 100644 index 53c3974f7..000000000 --- a/src/test/ui/pattern/non-constant-in-const-path.stderr +++ /dev/null @@ -1,28 +0,0 @@ -error[E0080]: runtime values cannot be referenced in patterns - --> $DIR/non-constant-in-const-path.rs:8:15 - | -LL | let 0u8..=x = 0; - | ^ - -error[E0158]: statics cannot be referenced in patterns - --> $DIR/non-constant-in-const-path.rs:10:15 - | -LL | let 0u8..=FOO = 0; - | ^^^ - -error[E0080]: runtime values cannot be referenced in patterns - --> $DIR/non-constant-in-const-path.rs:13:15 - | -LL | 0 ..= x => {} - | ^ - -error[E0158]: statics cannot be referenced in patterns - --> $DIR/non-constant-in-const-path.rs:15:15 - | -LL | 0 ..= FOO => {} - | ^^^ - -error: aborting due to 4 previous errors - -Some errors have detailed explanations: E0080, E0158. -For more information about an error, try `rustc --explain E0080`. diff --git a/src/test/ui/pattern/non-structural-match-types.rs b/src/test/ui/pattern/non-structural-match-types.rs deleted file mode 100644 index 5c3315473..000000000 --- a/src/test/ui/pattern/non-structural-match-types.rs +++ /dev/null @@ -1,14 +0,0 @@ -// edition:2021 -#![allow(incomplete_features)] -#![allow(unreachable_code)] -#![feature(const_async_blocks)] -#![feature(inline_const_pat)] - -fn main() { - match loop {} { - const { || {} } => {}, //~ ERROR cannot be used in patterns - } - match loop {} { - const { async {} } => {}, //~ ERROR cannot be used in patterns - } -} diff --git a/src/test/ui/pattern/non-structural-match-types.stderr b/src/test/ui/pattern/non-structural-match-types.stderr deleted file mode 100644 index dea7c4695..000000000 --- a/src/test/ui/pattern/non-structural-match-types.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: `[closure@$DIR/non-structural-match-types.rs:9:17: 9:19]` cannot be used in patterns - --> $DIR/non-structural-match-types.rs:9:9 - | -LL | const { || {} } => {}, - | ^^^^^^^^^^^^^^^ - -error: `[async block@$DIR/non-structural-match-types.rs:12:17: 12:25]` cannot be used in patterns - --> $DIR/non-structural-match-types.rs:12:9 - | -LL | const { async {} } => {}, - | ^^^^^^^^^^^^^^^^^^ - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/pattern/pat-shadow-in-nested-binding.rs b/src/test/ui/pattern/pat-shadow-in-nested-binding.rs deleted file mode 100644 index 7badbb6b9..000000000 --- a/src/test/ui/pattern/pat-shadow-in-nested-binding.rs +++ /dev/null @@ -1,6 +0,0 @@ -#[allow(non_camel_case_types)] -struct foo(usize); - -fn main() { - let (foo, _) = (2, 3); //~ ERROR let bindings cannot shadow tuple structs -} diff --git a/src/test/ui/pattern/pat-shadow-in-nested-binding.stderr b/src/test/ui/pattern/pat-shadow-in-nested-binding.stderr deleted file mode 100644 index 0c5824be9..000000000 --- a/src/test/ui/pattern/pat-shadow-in-nested-binding.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0530]: let bindings cannot shadow tuple structs - --> $DIR/pat-shadow-in-nested-binding.rs:5:10 - | -LL | struct foo(usize); - | ------------------ the tuple struct `foo` is defined here -... -LL | let (foo, _) = (2, 3); - | ^^^ cannot be named the same as a tuple struct - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0530`. diff --git a/src/test/ui/pattern/pat-struct-field-expr-has-type.rs b/src/test/ui/pattern/pat-struct-field-expr-has-type.rs deleted file mode 100644 index 1d18214de..000000000 --- a/src/test/ui/pattern/pat-struct-field-expr-has-type.rs +++ /dev/null @@ -1,9 +0,0 @@ -struct S { - f: u8, -} - -fn main() { - match (S { f: 42 }) { - S { f: Ok(_) } => {} //~ ERROR mismatched types - } -} diff --git a/src/test/ui/pattern/pat-struct-field-expr-has-type.stderr b/src/test/ui/pattern/pat-struct-field-expr-has-type.stderr deleted file mode 100644 index 3a61d4293..000000000 --- a/src/test/ui/pattern/pat-struct-field-expr-has-type.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/pat-struct-field-expr-has-type.rs:7:16 - | -LL | match (S { f: 42 }) { - | ------------- this expression has type `S` -LL | S { f: Ok(_) } => {} - | ^^^^^ expected `u8`, found enum `Result` - | - = note: expected type `u8` - found enum `Result<_, _>` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/pattern/pat-tuple-bad-type.rs b/src/test/ui/pattern/pat-tuple-bad-type.rs deleted file mode 100644 index 98481167a..000000000 --- a/src/test/ui/pattern/pat-tuple-bad-type.rs +++ /dev/null @@ -1,15 +0,0 @@ -fn main() { - let x; //~ ERROR type annotations needed - - match x { - (..) => {} - _ => {} - } - - match 0u8 { - (..) => {} //~ ERROR mismatched types - _ => {} - } - - x = 10; -} diff --git a/src/test/ui/pattern/pat-tuple-bad-type.stderr b/src/test/ui/pattern/pat-tuple-bad-type.stderr deleted file mode 100644 index 3342b8e40..000000000 --- a/src/test/ui/pattern/pat-tuple-bad-type.stderr +++ /dev/null @@ -1,26 +0,0 @@ -error[E0282]: type annotations needed - --> $DIR/pat-tuple-bad-type.rs:2:9 - | -LL | let x; - | ^ -... -LL | (..) => {} - | ---- type must be known at this point - | -help: consider giving `x` an explicit type - | -LL | let x: _; - | +++ - -error[E0308]: mismatched types - --> $DIR/pat-tuple-bad-type.rs:10:9 - | -LL | match 0u8 { - | --- this expression has type `u8` -LL | (..) => {} - | ^^^^ expected `u8`, found `()` - -error: aborting due to 2 previous errors - -Some errors have detailed explanations: E0282, E0308. -For more information about an error, try `rustc --explain E0282`. diff --git a/src/test/ui/pattern/pat-tuple-field-count-cross.rs b/src/test/ui/pattern/pat-tuple-field-count-cross.rs deleted file mode 100644 index b63da4e15..000000000 --- a/src/test/ui/pattern/pat-tuple-field-count-cross.rs +++ /dev/null @@ -1,57 +0,0 @@ -// aux-build:declarations-for-tuple-field-count-errors.rs - -extern crate declarations_for_tuple_field_count_errors; - -use declarations_for_tuple_field_count_errors::*; - -fn main() { - match Z0 { - Z0() => {} //~ ERROR expected tuple struct or tuple variant, found unit struct `Z0` - Z0(x) => {} //~ ERROR expected tuple struct or tuple variant, found unit struct `Z0` - } - match Z1() { - Z1 => {} //~ ERROR match bindings cannot shadow tuple structs - Z1(x) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple struct has 0 fields - } - - match S(1, 2, 3) { - S() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple struct has 3 fields - S(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple struct has 3 fields - S(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple struct has 3 fields - S(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple struct has 3 fields - } - match M(1, 2, 3) { - M() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple struct has 3 fields - M(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple struct has 3 fields - M(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple struct has 3 fields - M(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple struct has 3 fields - } - - match E1::Z0 { - E1::Z0() => {} //~ ERROR expected tuple struct or tuple variant, found unit variant `E1::Z0` - E1::Z0(x) => {} //~ ERROR expected tuple struct or tuple variant, found unit variant `E1::Z0` - } - match E1::Z1() { - E1::Z1 => {} //~ ERROR expected unit struct, unit variant or constant, found tuple variant `E1::Z1` - E1::Z1(x) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 0 fields - } - match E1::S(1, 2, 3) { - E1::S() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple variant has 3 fields - E1::S(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 3 fields - E1::S(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple variant has 3 fields - E1::S(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple variant has 3 fields - } - - match E2::S(1, 2, 3) { - E2::S() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple variant has 3 fields - E2::S(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 3 fields - E2::S(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple variant has 3 fields - E2::S(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple variant has 3 fields - } - match E2::M(1, 2, 3) { - E2::M() => {} //~ ERROR this pattern has 0 fields, but the corresponding tuple variant has 3 fields - E2::M(1) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 3 fields - E2::M(xyz, abc) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple variant has 3 fields - E2::M(1, 2, 3, 4) => {} //~ ERROR this pattern has 4 fields, but the corresponding tuple variant has 3 fields - } -} diff --git a/src/test/ui/pattern/pat-tuple-field-count-cross.stderr b/src/test/ui/pattern/pat-tuple-field-count-cross.stderr deleted file mode 100644 index d92957461..000000000 --- a/src/test/ui/pattern/pat-tuple-field-count-cross.stderr +++ /dev/null @@ -1,531 +0,0 @@ -error[E0530]: match bindings cannot shadow tuple structs - --> $DIR/pat-tuple-field-count-cross.rs:13:9 - | -LL | use declarations_for_tuple_field_count_errors::*; - | -------------------------------------------- the tuple struct `Z1` is imported here -... -LL | Z1 => {} - | ^^ - | | - | cannot be named the same as a tuple struct - | help: try specify the pattern arguments: `Z1(..)` - -error[E0532]: expected tuple struct or tuple variant, found unit struct `Z0` - --> $DIR/pat-tuple-field-count-cross.rs:9:9 - | -LL | Z0() => {} - | ^^^^ - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:1:1 - | -LL | pub struct Z0; - | ------------- `Z0` defined here -LL | pub struct Z1(); - | ------------- similarly named tuple struct `Z1` defined here - | -help: use this syntax instead - | -LL | Z0 => {} - | ~~ -help: a tuple struct with a similar name exists - | -LL | Z1() => {} - | ~~ - -error[E0532]: expected tuple struct or tuple variant, found unit struct `Z0` - --> $DIR/pat-tuple-field-count-cross.rs:10:9 - | -LL | Z0(x) => {} - | ^^^^^ - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:1:1 - | -LL | pub struct Z0; - | ------------- `Z0` defined here -LL | pub struct Z1(); - | ------------- similarly named tuple struct `Z1` defined here - | -help: use this syntax instead - | -LL | Z0 => {} - | ~~ -help: a tuple struct with a similar name exists - | -LL | Z1(x) => {} - | ~~ - -error[E0532]: expected tuple struct or tuple variant, found unit variant `E1::Z0` - --> $DIR/pat-tuple-field-count-cross.rs:31:9 - | -LL | E1::Z0() => {} - | ^^^^^^^^ - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:15 - | -LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - | -- -- similarly named tuple variant `Z1` defined here - | | - | `E1::Z0` defined here - | -help: use this syntax instead - | -LL | E1::Z0 => {} - | ~~~~~~ -help: a tuple variant with a similar name exists - | -LL | E1::Z1() => {} - | ~~ - -error[E0532]: expected tuple struct or tuple variant, found unit variant `E1::Z0` - --> $DIR/pat-tuple-field-count-cross.rs:32:9 - | -LL | E1::Z0(x) => {} - | ^^^^^^^^^ - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:15 - | -LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - | -- -- similarly named tuple variant `Z1` defined here - | | - | `E1::Z0` defined here - | -help: use this syntax instead - | -LL | E1::Z0 => {} - | ~~~~~~ -help: a tuple variant with a similar name exists - | -LL | E1::Z1(x) => {} - | ~~ - -error[E0532]: expected unit struct, unit variant or constant, found tuple variant `E1::Z1` - --> $DIR/pat-tuple-field-count-cross.rs:35:9 - | -LL | E1::Z1 => {} - | ^^^^^^ - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:19 - | -LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - | -- -- `E1::Z1` defined here - | | - | similarly named unit variant `Z0` defined here - | -help: use the tuple variant pattern syntax instead - | -LL | E1::Z1(/* fields */) => {} - | ~~~~~~~~~~~~~~~~~~~~ -help: a unit variant with a similar name exists - | -LL | E1::Z0 => {} - | ~~ - -error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 0 fields - --> $DIR/pat-tuple-field-count-cross.rs:14:12 - | -LL | Z1(x) => {} - | ^ expected 0 fields, found 1 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:2:1 - | -LL | pub struct Z1(); - | ------------- tuple struct has 0 fields - -error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:18:9 - | -LL | S() => {} - | ^^^ expected 3 fields, found 0 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:4:14 - | -LL | pub struct S(pub u8, pub u8, pub u8); - | ------ ------ ------ tuple struct has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | S(_, _, _) => {} - | +++++++ -help: use `..` to ignore all fields - | -LL | S(..) => {} - | ++ - -error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:19:11 - | -LL | S(1) => {} - | ^ expected 3 fields, found 1 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:4:14 - | -LL | pub struct S(pub u8, pub u8, pub u8); - | ------ ------ ------ tuple struct has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | S(1, _, _) => {} - | ++++++ -help: use `..` to ignore the rest of the fields - | -LL | S(1, ..) => {} - | ++++ - -error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:20:11 - | -LL | S(xyz, abc) => {} - | ^^^ ^^^ expected 3 fields, found 2 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:4:14 - | -LL | pub struct S(pub u8, pub u8, pub u8); - | ------ ------ ------ tuple struct has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | S(xyz, abc, _) => {} - | +++ - -error[E0023]: this pattern has 4 fields, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:21:11 - | -LL | S(1, 2, 3, 4) => {} - | ^ ^ ^ ^ expected 3 fields, found 4 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:4:14 - | -LL | pub struct S(pub u8, pub u8, pub u8); - | ------ ------ ------ tuple struct has 3 fields - -error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:24:9 - | -LL | M() => {} - | ^^^ expected 3 fields, found 0 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:5:12 - | -LL | pub struct M( - | - tuple struct defined here -LL | pub u8, - | ------ -LL | pub u8, - | ------ -LL | pub u8, - | ------ tuple struct has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | M(_, _, _) => {} - | +++++++ -help: use `..` to ignore all fields - | -LL | M(..) => {} - | ++ - -error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:25:11 - | -LL | M(1) => {} - | ^ expected 3 fields, found 1 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:5:12 - | -LL | pub struct M( - | - tuple struct defined here -LL | pub u8, - | ------ -LL | pub u8, - | ------ -LL | pub u8, - | ------ tuple struct has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | M(1, _, _) => {} - | ++++++ -help: use `..` to ignore the rest of the fields - | -LL | M(1, ..) => {} - | ++++ - -error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:26:11 - | -LL | M(xyz, abc) => {} - | ^^^ ^^^ expected 3 fields, found 2 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:5:12 - | -LL | pub struct M( - | - tuple struct defined here -LL | pub u8, - | ------ -LL | pub u8, - | ------ -LL | pub u8, - | ------ tuple struct has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | M(xyz, abc, _) => {} - | +++ - -error[E0023]: this pattern has 4 fields, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:27:11 - | -LL | M(1, 2, 3, 4) => {} - | ^ ^ ^ ^ expected 3 fields, found 4 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:5:12 - | -LL | pub struct M( - | - tuple struct defined here -LL | pub u8, - | ------ -LL | pub u8, - | ------ -LL | pub u8, - | ------ tuple struct has 3 fields - -error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 0 fields - --> $DIR/pat-tuple-field-count-cross.rs:36:16 - | -LL | E1::Z1(x) => {} - | ^ expected 0 fields, found 1 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:19 - | -LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - | -- tuple variant has 0 fields - -error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:39:9 - | -LL | E1::S() => {} - | ^^^^^^^ expected 3 fields, found 0 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:27 - | -LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - | -- -- -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E1::S(_, _, _) => {} - | +++++++ -help: use `..` to ignore all fields - | -LL | E1::S(..) => {} - | ++ - -error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:40:15 - | -LL | E1::S(1) => {} - | ^ expected 3 fields, found 1 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:27 - | -LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - | -- -- -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E1::S(1, _, _) => {} - | ++++++ -help: use `..` to ignore the rest of the fields - | -LL | E1::S(1, ..) => {} - | ++++ - -error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:41:15 - | -LL | E1::S(xyz, abc) => {} - | ^^^ ^^^ expected 3 fields, found 2 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:27 - | -LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - | -- -- -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E1::S(xyz, abc, _) => {} - | +++ - -error[E0023]: this pattern has 4 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:42:15 - | -LL | E1::S(1, 2, 3, 4) => {} - | ^ ^ ^ ^ expected 3 fields, found 4 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:27 - | -LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) } - | -- -- -- tuple variant has 3 fields - -error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:46:9 - | -LL | E2::S() => {} - | ^^^^^^^ expected 3 fields, found 0 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:14:7 - | -LL | S(u8, u8, u8), - | -- -- -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E2::S(_, _, _) => {} - | +++++++ -help: use `..` to ignore all fields - | -LL | E2::S(..) => {} - | ++ - -error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:47:15 - | -LL | E2::S(1) => {} - | ^ expected 3 fields, found 1 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:14:7 - | -LL | S(u8, u8, u8), - | -- -- -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E2::S(1, _, _) => {} - | ++++++ -help: use `..` to ignore the rest of the fields - | -LL | E2::S(1, ..) => {} - | ++++ - -error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:48:15 - | -LL | E2::S(xyz, abc) => {} - | ^^^ ^^^ expected 3 fields, found 2 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:14:7 - | -LL | S(u8, u8, u8), - | -- -- -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E2::S(xyz, abc, _) => {} - | +++ - -error[E0023]: this pattern has 4 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:49:15 - | -LL | E2::S(1, 2, 3, 4) => {} - | ^ ^ ^ ^ expected 3 fields, found 4 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:14:7 - | -LL | S(u8, u8, u8), - | -- -- -- tuple variant has 3 fields - -error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:52:9 - | -LL | E2::M() => {} - | ^^^^^^^ expected 3 fields, found 0 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:15:5 - | -LL | M( - | - tuple variant defined here -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E2::M(_, _, _) => {} - | +++++++ -help: use `..` to ignore all fields - | -LL | E2::M(..) => {} - | ++ - -error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:53:15 - | -LL | E2::M(1) => {} - | ^ expected 3 fields, found 1 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:15:5 - | -LL | M( - | - tuple variant defined here -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E2::M(1, _, _) => {} - | ++++++ -help: use `..` to ignore the rest of the fields - | -LL | E2::M(1, ..) => {} - | ++++ - -error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:54:15 - | -LL | E2::M(xyz, abc) => {} - | ^^^ ^^^ expected 3 fields, found 2 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:15:5 - | -LL | M( - | - tuple variant defined here -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- tuple variant has 3 fields - | -help: use `_` to explicitly ignore each field - | -LL | E2::M(xyz, abc, _) => {} - | +++ - -error[E0023]: this pattern has 4 fields, but the corresponding tuple variant has 3 fields - --> $DIR/pat-tuple-field-count-cross.rs:55:15 - | -LL | E2::M(1, 2, 3, 4) => {} - | ^ ^ ^ ^ expected 3 fields, found 4 - | - ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:15:5 - | -LL | M( - | - tuple variant defined here -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- tuple variant has 3 fields - -error: aborting due to 28 previous errors - -Some errors have detailed explanations: E0023, E0530, E0532. -For more information about an error, try `rustc --explain E0023`. diff --git a/src/test/ui/pattern/pat-tuple-overfield.rs b/src/test/ui/pattern/pat-tuple-overfield.rs deleted file mode 100644 index c863c6575..000000000 --- a/src/test/ui/pattern/pat-tuple-overfield.rs +++ /dev/null @@ -1,74 +0,0 @@ -struct S(u8, u8, u8); -struct M( - u8, - u8, - u8, - u8, - u8, -); - -struct Z0; -struct Z1(); -enum E1 { - Z0, - Z1(), -} - -fn main() { - match (1, 2, 3) { - (1, 2, 3, 4) => {} //~ ERROR mismatched types - (1, 2, .., 3, 4) => {} //~ ERROR mismatched types - _ => {} - } - match S(1, 2, 3) { - S(1, 2, 3, 4) => {} - //~^ ERROR this pattern has 4 fields, but the corresponding tuple struct has 3 fields - S(1, 2, .., 3, 4) => {} - //~^ ERROR this pattern has 4 fields, but the corresponding tuple struct has 3 fields - _ => {} - } - match M(1, 2, 3, 4, 5) { - M(1, 2, 3, 4, 5, 6) => {} - //~^ ERROR this pattern has 6 fields, but the corresponding tuple struct has 5 fields - M(1, - 2, - 3, - 4, - 5, - 6) => {} - //~^ ERROR this pattern has 6 fields, but the corresponding tuple struct has 5 fields - M( - 1, - 2, - 3, - 4, - 5, - 6, - ) => {} - //~^^ ERROR this pattern has 6 fields, but the corresponding tuple struct has 5 fields - } - match Z0 { - Z0 => {} - Z0() => {} //~ ERROR expected tuple struct or tuple variant, found unit struct `Z0` - Z0(_) => {} //~ ERROR expected tuple struct or tuple variant, found unit struct `Z0` - Z0(_, _) => {} //~ ERROR expected tuple struct or tuple variant, found unit struct `Z0` - } - match Z1() { - Z1 => {} //~ ERROR match bindings cannot shadow tuple structs - Z1() => {} - Z1(_) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple struct has 0 fields - Z1(_, _) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple struct has 0 fields - } - match E1::Z0 { - E1::Z0 => {} - E1::Z0() => {} //~ ERROR expected tuple struct or tuple variant, found unit variant `E1::Z0` - E1::Z0(_) => {} //~ ERROR expected tuple struct or tuple variant, found unit variant `E1::Z0` - E1::Z0(_, _) => {} //~ ERROR expected tuple struct or tuple variant, found unit variant `E1::Z0` - } - match E1::Z1() { - E1::Z1 => {} //~ ERROR expected unit struct, unit variant or constant, found tuple variant `E1::Z1` - E1::Z1() => {} - E1::Z1(_) => {} //~ ERROR this pattern has 1 field, but the corresponding tuple variant has 0 fields - E1::Z1(_, _) => {} //~ ERROR this pattern has 2 fields, but the corresponding tuple variant has 0 fields - } -} diff --git a/src/test/ui/pattern/pat-tuple-overfield.stderr b/src/test/ui/pattern/pat-tuple-overfield.stderr deleted file mode 100644 index 54d89e031..000000000 --- a/src/test/ui/pattern/pat-tuple-overfield.stderr +++ /dev/null @@ -1,312 +0,0 @@ -error[E0530]: match bindings cannot shadow tuple structs - --> $DIR/pat-tuple-overfield.rs:57:9 - | -LL | struct Z1(); - | ------------ the tuple struct `Z1` is defined here -... -LL | Z1 => {} - | ^^ - | | - | cannot be named the same as a tuple struct - | help: try specify the pattern arguments: `Z1(..)` - -error[E0532]: expected tuple struct or tuple variant, found unit struct `Z0` - --> $DIR/pat-tuple-overfield.rs:52:9 - | -LL | struct Z0; - | ---------- `Z0` defined here -LL | struct Z1(); - | ------------ similarly named tuple struct `Z1` defined here -... -LL | Z0() => {} - | ^^^^ - | -help: use this syntax instead - | -LL | Z0 => {} - | ~~ -help: a tuple struct with a similar name exists - | -LL | Z1() => {} - | ~~ - -error[E0532]: expected tuple struct or tuple variant, found unit struct `Z0` - --> $DIR/pat-tuple-overfield.rs:53:9 - | -LL | struct Z0; - | ---------- `Z0` defined here -LL | struct Z1(); - | ------------ similarly named tuple struct `Z1` defined here -... -LL | Z0(_) => {} - | ^^^^^ - | -help: use this syntax instead - | -LL | Z0 => {} - | ~~ -help: a tuple struct with a similar name exists - | -LL | Z1(_) => {} - | ~~ - -error[E0532]: expected tuple struct or tuple variant, found unit struct `Z0` - --> $DIR/pat-tuple-overfield.rs:54:9 - | -LL | struct Z0; - | ---------- `Z0` defined here -LL | struct Z1(); - | ------------ similarly named tuple struct `Z1` defined here -... -LL | Z0(_, _) => {} - | ^^^^^^^^ - | -help: use this syntax instead - | -LL | Z0 => {} - | ~~ -help: a tuple struct with a similar name exists - | -LL | Z1(_, _) => {} - | ~~ - -error[E0532]: expected tuple struct or tuple variant, found unit variant `E1::Z0` - --> $DIR/pat-tuple-overfield.rs:64:9 - | -LL | Z0, - | -- `E1::Z0` defined here -LL | Z1(), - | ---- similarly named tuple variant `Z1` defined here -... -LL | E1::Z0() => {} - | ^^^^^^^^ - | -help: use this syntax instead - | -LL | E1::Z0 => {} - | ~~~~~~ -help: a tuple variant with a similar name exists - | -LL | E1::Z1() => {} - | ~~ - -error[E0532]: expected tuple struct or tuple variant, found unit variant `E1::Z0` - --> $DIR/pat-tuple-overfield.rs:65:9 - | -LL | Z0, - | -- `E1::Z0` defined here -LL | Z1(), - | ---- similarly named tuple variant `Z1` defined here -... -LL | E1::Z0(_) => {} - | ^^^^^^^^^ - | -help: use this syntax instead - | -LL | E1::Z0 => {} - | ~~~~~~ -help: a tuple variant with a similar name exists - | -LL | E1::Z1(_) => {} - | ~~ - -error[E0532]: expected tuple struct or tuple variant, found unit variant `E1::Z0` - --> $DIR/pat-tuple-overfield.rs:66:9 - | -LL | Z0, - | -- `E1::Z0` defined here -LL | Z1(), - | ---- similarly named tuple variant `Z1` defined here -... -LL | E1::Z0(_, _) => {} - | ^^^^^^^^^^^^ - | -help: use this syntax instead - | -LL | E1::Z0 => {} - | ~~~~~~ -help: a tuple variant with a similar name exists - | -LL | E1::Z1(_, _) => {} - | ~~ - -error[E0532]: expected unit struct, unit variant or constant, found tuple variant `E1::Z1` - --> $DIR/pat-tuple-overfield.rs:69:9 - | -LL | Z0, - | -- similarly named unit variant `Z0` defined here -LL | Z1(), - | ---- `E1::Z1` defined here -... -LL | E1::Z1 => {} - | ^^^^^^ - | -help: use the tuple variant pattern syntax instead - | -LL | E1::Z1() => {} - | ~~~~~~~~ -help: a unit variant with a similar name exists - | -LL | E1::Z0 => {} - | ~~ - -error[E0308]: mismatched types - --> $DIR/pat-tuple-overfield.rs:19:9 - | -LL | match (1, 2, 3) { - | --------- this expression has type `({integer}, {integer}, {integer})` -LL | (1, 2, 3, 4) => {} - | ^^^^^^^^^^^^ expected a tuple with 3 elements, found one with 4 elements - | - = note: expected tuple `({integer}, {integer}, {integer})` - found tuple `(_, _, _, _)` - -error[E0308]: mismatched types - --> $DIR/pat-tuple-overfield.rs:20:9 - | -LL | match (1, 2, 3) { - | --------- this expression has type `({integer}, {integer}, {integer})` -LL | (1, 2, 3, 4) => {} -LL | (1, 2, .., 3, 4) => {} - | ^^^^^^^^^^^^^^^^ expected a tuple with 3 elements, found one with 4 elements - | - = note: expected tuple `({integer}, {integer}, {integer})` - found tuple `(_, _, _, _)` - -error[E0023]: this pattern has 4 fields, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-overfield.rs:24:11 - | -LL | struct S(u8, u8, u8); - | -- -- -- tuple struct has 3 fields -... -LL | S(1, 2, 3, 4) => {} - | ^ ^ ^ ^ expected 3 fields, found 4 - -error[E0023]: this pattern has 4 fields, but the corresponding tuple struct has 3 fields - --> $DIR/pat-tuple-overfield.rs:26:11 - | -LL | struct S(u8, u8, u8); - | -- -- -- tuple struct has 3 fields -... -LL | S(1, 2, .., 3, 4) => {} - | ^ ^ ^ ^ expected 3 fields, found 4 - -error[E0023]: this pattern has 6 fields, but the corresponding tuple struct has 5 fields - --> $DIR/pat-tuple-overfield.rs:31:11 - | -LL | struct M( - | - tuple struct defined here -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- tuple struct has 5 fields -... -LL | M(1, 2, 3, 4, 5, 6) => {} - | ^ ^ ^ ^ ^ ^ expected 5 fields, found 6 - -error[E0023]: this pattern has 6 fields, but the corresponding tuple struct has 5 fields - --> $DIR/pat-tuple-overfield.rs:33:11 - | -LL | struct M( - | - tuple struct defined here -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- tuple struct has 5 fields -... -LL | M(1, - | - ^ -LL | 2, - | ^ -LL | 3, - | ^ -LL | 4, - | ^ -LL | 5, - | ^ -LL | 6) => {} - | ^ expected 5 fields, found 6 - -error[E0023]: this pattern has 6 fields, but the corresponding tuple struct has 5 fields - --> $DIR/pat-tuple-overfield.rs:41:13 - | -LL | struct M( - | - tuple struct defined here -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- -LL | u8, - | -- tuple struct has 5 fields -... -LL | M( - | - -LL | 1, - | ^ -LL | 2, - | ^ -LL | 3, - | ^ -LL | 4, - | ^ -LL | 5, - | ^ -LL | 6, - | ^ expected 5 fields, found 6 - -error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 0 fields - --> $DIR/pat-tuple-overfield.rs:59:12 - | -LL | struct Z1(); - | --------- tuple struct has 0 fields -... -LL | Z1(_) => {} - | ^ expected 0 fields, found 1 - -error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has 0 fields - --> $DIR/pat-tuple-overfield.rs:60:12 - | -LL | struct Z1(); - | --------- tuple struct has 0 fields -... -LL | Z1(_, _) => {} - | ^ ^ expected 0 fields, found 2 - -error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 0 fields - --> $DIR/pat-tuple-overfield.rs:71:16 - | -LL | Z1(), - | -- tuple variant has 0 fields -... -LL | E1::Z1(_) => {} - | ^ expected 0 fields, found 1 - -error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has 0 fields - --> $DIR/pat-tuple-overfield.rs:72:16 - | -LL | Z1(), - | -- tuple variant has 0 fields -... -LL | E1::Z1(_, _) => {} - | ^ ^ expected 0 fields, found 2 - -error: aborting due to 19 previous errors - -Some errors have detailed explanations: E0023, E0308, E0530, E0532. -For more information about an error, try `rustc --explain E0023`. diff --git a/src/test/ui/pattern/pat-tuple-underfield.rs b/src/test/ui/pattern/pat-tuple-underfield.rs deleted file mode 100644 index dac60e3fa..000000000 --- a/src/test/ui/pattern/pat-tuple-underfield.rs +++ /dev/null @@ -1,67 +0,0 @@ -struct S(i32, f32); -enum E { - S(i32, f32), -} -struct Point4(i32, i32, i32, i32); - -fn main() { - match S(0, 1.0) { - S(x) => {} - //~^ ERROR this pattern has 1 field, but the corresponding tuple struct has 2 fields - //~| HELP use `_` to explicitly ignore each field - } - match S(0, 1.0) { - S(_) => {} - //~^ ERROR this pattern has 1 field, but the corresponding tuple struct has 2 fields - //~| HELP use `_` to explicitly ignore each field - //~| HELP use `..` to ignore all fields - } - match S(0, 1.0) { - S() => {} - //~^ ERROR this pattern has 0 fields, but the corresponding tuple struct has 2 fields - //~| HELP use `_` to explicitly ignore each field - //~| HELP use `..` to ignore all fields - - // Test non-standard formatting - S () => {} - //~^ ERROR this pattern has 0 fields, but the corresponding tuple struct has 2 fields - //~| HELP use `_` to explicitly ignore each field - //~| HELP use `..` to ignore all fields - } - - match E::S(0, 1.0) { - E::S(x) => {} - //~^ ERROR this pattern has 1 field, but the corresponding tuple variant has 2 fields - //~| HELP use `_` to explicitly ignore each field - } - match E::S(0, 1.0) { - E::S(_) => {} - //~^ ERROR this pattern has 1 field, but the corresponding tuple variant has 2 fields - //~| HELP use `_` to explicitly ignore each field - //~| HELP use `..` to ignore all fields - } - match E::S(0, 1.0) { - E::S() => {} - //~^ ERROR this pattern has 0 fields, but the corresponding tuple variant has 2 fields - //~| HELP use `_` to explicitly ignore each field - //~| HELP use `..` to ignore all fields - - // Test non-standard formatting - E::S () => {} - //~^ ERROR this pattern has 0 fields, but the corresponding tuple variant has 2 fields - //~| HELP use `_` to explicitly ignore each field - //~| HELP use `..` to ignore all fields - } - match E::S(0, 1.0) { - E::S => {} - //~^ ERROR expected unit struct, unit variant or constant, found tuple variant `E::S` - //~| HELP use the tuple variant pattern syntax instead - } - - match Point4(0, 1, 2, 3) { - Point4( a , _ ) => {} - //~^ ERROR this pattern has 2 fields, but the corresponding tuple struct has 4 fields - //~| HELP use `_` to explicitly ignore each field - //~| HELP use `..` to ignore the rest of the fields - } -} diff --git a/src/test/ui/pattern/pat-tuple-underfield.stderr b/src/test/ui/pattern/pat-tuple-underfield.stderr deleted file mode 100644 index e75f9b38d..000000000 --- a/src/test/ui/pattern/pat-tuple-underfield.stderr +++ /dev/null @@ -1,167 +0,0 @@ -error[E0532]: expected unit struct, unit variant or constant, found tuple variant `E::S` - --> $DIR/pat-tuple-underfield.rs:56:9 - | -LL | S(i32, f32), - | ----------- `E::S` defined here -... -LL | E::S => {} - | ^^^^ help: use the tuple variant pattern syntax instead: `E::S(_, _)` - -error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 2 fields - --> $DIR/pat-tuple-underfield.rs:9:11 - | -LL | struct S(i32, f32); - | --- --- tuple struct has 2 fields -... -LL | S(x) => {} - | ^ expected 2 fields, found 1 - | -help: use `_` to explicitly ignore each field - | -LL | S(x, _) => {} - | +++ - -error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 2 fields - --> $DIR/pat-tuple-underfield.rs:14:11 - | -LL | struct S(i32, f32); - | --- --- tuple struct has 2 fields -... -LL | S(_) => {} - | ^ expected 2 fields, found 1 - | -help: use `_` to explicitly ignore each field - | -LL | S(_, _) => {} - | +++ -help: use `..` to ignore all fields - | -LL | S(..) => {} - | ~~ - -error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 2 fields - --> $DIR/pat-tuple-underfield.rs:20:9 - | -LL | struct S(i32, f32); - | --- --- tuple struct has 2 fields -... -LL | S() => {} - | ^^^ expected 2 fields, found 0 - | -help: use `_` to explicitly ignore each field - | -LL | S(_, _) => {} - | ++++ -help: use `..` to ignore all fields - | -LL | S(..) => {} - | ++ - -error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 2 fields - --> $DIR/pat-tuple-underfield.rs:26:9 - | -LL | struct S(i32, f32); - | --- --- tuple struct has 2 fields -... -LL | S () => {} - | ^^^^ expected 2 fields, found 0 - | -help: use `_` to explicitly ignore each field - | -LL | S (_, _) => {} - | ++++ -help: use `..` to ignore all fields - | -LL | S (..) => {} - | ++ - -error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 2 fields - --> $DIR/pat-tuple-underfield.rs:33:14 - | -LL | S(i32, f32), - | --- --- tuple variant has 2 fields -... -LL | E::S(x) => {} - | ^ expected 2 fields, found 1 - | -help: use `_` to explicitly ignore each field - | -LL | E::S(x, _) => {} - | +++ - -error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 2 fields - --> $DIR/pat-tuple-underfield.rs:38:14 - | -LL | S(i32, f32), - | --- --- tuple variant has 2 fields -... -LL | E::S(_) => {} - | ^ expected 2 fields, found 1 - | -help: use `_` to explicitly ignore each field - | -LL | E::S(_, _) => {} - | +++ -help: use `..` to ignore all fields - | -LL | E::S(..) => {} - | ~~ - -error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 2 fields - --> $DIR/pat-tuple-underfield.rs:44:9 - | -LL | S(i32, f32), - | --- --- tuple variant has 2 fields -... -LL | E::S() => {} - | ^^^^^^ expected 2 fields, found 0 - | -help: use `_` to explicitly ignore each field - | -LL | E::S(_, _) => {} - | ++++ -help: use `..` to ignore all fields - | -LL | E::S(..) => {} - | ++ - -error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 2 fields - --> $DIR/pat-tuple-underfield.rs:50:9 - | -LL | S(i32, f32), - | --- --- tuple variant has 2 fields -... -LL | E::S () => {} - | ^^^^^^^ expected 2 fields, found 0 - | -help: use `_` to explicitly ignore each field - | -LL | E::S (_, _) => {} - | ++++ -help: use `..` to ignore all fields - | -LL | E::S (..) => {} - | ++ - -error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has 4 fields - --> $DIR/pat-tuple-underfield.rs:62:19 - | -LL | struct Point4(i32, i32, i32, i32); - | --- --- --- --- tuple struct has 4 fields -... -LL | Point4( a , _ ) => {} - | ^ ^ expected 4 fields, found 2 - | -help: use `_` to explicitly ignore each field - | -LL | Point4( a , _ , _, _) => {} - | ++++++ -help: use `..` to ignore the rest of the fields - | -LL | Point4( a, ..) => {} - | ~~~~ - -error: aborting due to 10 previous errors - -Some errors have detailed explanations: E0023, E0532. -For more information about an error, try `rustc --explain E0023`. diff --git a/src/test/ui/pattern/pat-type-err-formal-param.rs b/src/test/ui/pattern/pat-type-err-formal-param.rs deleted file mode 100644 index 54336b349..000000000 --- a/src/test/ui/pattern/pat-type-err-formal-param.rs +++ /dev/null @@ -1,8 +0,0 @@ -// Test the `.span_label(..)` to the type when there's a -// type error in a pattern due to a the formal parameter. - -fn main() {} - -struct Tuple(u8); - -fn foo(Tuple(_): String) {} //~ ERROR mismatched types diff --git a/src/test/ui/pattern/pat-type-err-formal-param.stderr b/src/test/ui/pattern/pat-type-err-formal-param.stderr deleted file mode 100644 index 206713a4b..000000000 --- a/src/test/ui/pattern/pat-type-err-formal-param.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/pat-type-err-formal-param.rs:8:8 - | -LL | fn foo(Tuple(_): String) {} - | ^^^^^^^^ ------ expected due to this - | | - | expected struct `String`, found struct `Tuple` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/pattern/pat-type-err-let-stmt.rs b/src/test/ui/pattern/pat-type-err-let-stmt.rs deleted file mode 100644 index 6e9850b65..000000000 --- a/src/test/ui/pattern/pat-type-err-let-stmt.rs +++ /dev/null @@ -1,16 +0,0 @@ -// Test the `.span_label` to the type / scrutinee -// when there's a type error in checking a pattern. - -fn main() { - // We want to point at the `Option<u8>`. - let Ok(0): Option<u8> = 42u8; - //~^ ERROR mismatched types - //~| ERROR mismatched types - - // We want to point at the `Option<u8>`. - let Ok(0): Option<u8>; - //~^ ERROR mismatched types - - // We want to point at the scrutinee. - let Ok(0) = 42u8; //~ ERROR mismatched types -} diff --git a/src/test/ui/pattern/pat-type-err-let-stmt.stderr b/src/test/ui/pattern/pat-type-err-let-stmt.stderr deleted file mode 100644 index 090bd6711..000000000 --- a/src/test/ui/pattern/pat-type-err-let-stmt.stderr +++ /dev/null @@ -1,51 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/pat-type-err-let-stmt.rs:6:29 - | -LL | let Ok(0): Option<u8> = 42u8; - | ---------- ^^^^ expected enum `Option`, found `u8` - | | - | expected due to this - | - = note: expected enum `Option<u8>` - found type `u8` -help: try wrapping the expression in `Some` - | -LL | let Ok(0): Option<u8> = Some(42u8); - | +++++ + - -error[E0308]: mismatched types - --> $DIR/pat-type-err-let-stmt.rs:6:9 - | -LL | let Ok(0): Option<u8> = 42u8; - | ^^^^^ ---------- expected due to this - | | - | expected enum `Option`, found enum `Result` - | - = note: expected enum `Option<u8>` - found enum `Result<_, _>` - -error[E0308]: mismatched types - --> $DIR/pat-type-err-let-stmt.rs:11:9 - | -LL | let Ok(0): Option<u8>; - | ^^^^^ ---------- expected due to this - | | - | expected enum `Option`, found enum `Result` - | - = note: expected enum `Option<u8>` - found enum `Result<_, _>` - -error[E0308]: mismatched types - --> $DIR/pat-type-err-let-stmt.rs:15:9 - | -LL | let Ok(0) = 42u8; - | ^^^^^ ---- this expression has type `u8` - | | - | expected `u8`, found enum `Result` - | - = note: expected type `u8` - found enum `Result<_, _>` - -error: aborting due to 4 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/pattern/patkind-litrange-no-expr.rs b/src/test/ui/pattern/patkind-litrange-no-expr.rs deleted file mode 100644 index 7ef541cb5..000000000 --- a/src/test/ui/pattern/patkind-litrange-no-expr.rs +++ /dev/null @@ -1,24 +0,0 @@ -macro_rules! enum_number { - ($name:ident { $($variant:ident = $value:expr, )* }) => { - enum $name { - $($variant = $value,)* - } - - fn foo(value: i32) -> Option<$name> { - match value { - $( $value => Some($name::$variant), )* // PatKind::Lit - $( $value ..= 42 => Some($name::$variant), )* // PatKind::Range - _ => None - } - } - } -} - -enum_number!(Change { - Pos = 1, - Neg = -1, - Arith = 1 + 1, //~ ERROR arbitrary expressions aren't allowed in patterns - //~| ERROR arbitrary expressions aren't allowed in patterns -}); - -fn main() {} diff --git a/src/test/ui/pattern/patkind-litrange-no-expr.stderr b/src/test/ui/pattern/patkind-litrange-no-expr.stderr deleted file mode 100644 index eb1ee7e45..000000000 --- a/src/test/ui/pattern/patkind-litrange-no-expr.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: arbitrary expressions aren't allowed in patterns - --> $DIR/patkind-litrange-no-expr.rs:20:13 - | -LL | Arith = 1 + 1, - | ^^^^^ - -error: arbitrary expressions aren't allowed in patterns - --> $DIR/patkind-litrange-no-expr.rs:20:13 - | -LL | Arith = 1 + 1, - | ^^^^^ - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/pattern/pattern-binding-disambiguation.rs b/src/test/ui/pattern/pattern-binding-disambiguation.rs deleted file mode 100644 index ce1d8c6c0..000000000 --- a/src/test/ui/pattern/pattern-binding-disambiguation.rs +++ /dev/null @@ -1,57 +0,0 @@ -struct UnitStruct; -struct TupleStruct(); -struct BracedStruct{} - -enum E { - UnitVariant, - TupleVariant(), - BracedVariant{}, -} -use E::*; - -const CONST: () = (); -static STATIC: () = (); - -fn function() {} - -fn main() { - let doesnt_matter = 0; - - match UnitStruct { - UnitStruct => {} // OK, `UnitStruct` is a unit struct pattern - } - match doesnt_matter { - TupleStruct => {} //~ ERROR match bindings cannot shadow tuple structs - } - match doesnt_matter { - BracedStruct => {} // OK, `BracedStruct` is a fresh binding - } - match UnitVariant { - UnitVariant => {} // OK, `UnitVariant` is a unit variant pattern - } - match doesnt_matter { - TupleVariant => {} //~ ERROR match bindings cannot shadow tuple variants - } - match doesnt_matter { - BracedVariant => {} // OK, `BracedVariant` is a fresh binding - } - match CONST { - CONST => {} // OK, `CONST` is a const pattern - } - match doesnt_matter { - STATIC => {} //~ ERROR match bindings cannot shadow statics - } - match doesnt_matter { - function => {} // OK, `function` is a fresh binding - } - - let UnitStruct = UnitStruct; // OK, `UnitStruct` is a unit struct pattern - let TupleStruct = doesnt_matter; //~ ERROR let bindings cannot shadow tuple structs - let BracedStruct = doesnt_matter; // OK, `BracedStruct` is a fresh binding - let UnitVariant = UnitVariant; // OK, `UnitVariant` is a unit variant pattern - let TupleVariant = doesnt_matter; //~ ERROR let bindings cannot shadow tuple variants - let BracedVariant = doesnt_matter; // OK, `BracedVariant` is a fresh binding - let CONST = CONST; // OK, `CONST` is a const pattern - let STATIC = doesnt_matter; //~ ERROR let bindings cannot shadow statics - let function = doesnt_matter; // OK, `function` is a fresh binding -} diff --git a/src/test/ui/pattern/pattern-binding-disambiguation.stderr b/src/test/ui/pattern/pattern-binding-disambiguation.stderr deleted file mode 100644 index d54467b3c..000000000 --- a/src/test/ui/pattern/pattern-binding-disambiguation.stderr +++ /dev/null @@ -1,63 +0,0 @@ -error[E0530]: match bindings cannot shadow tuple structs - --> $DIR/pattern-binding-disambiguation.rs:24:9 - | -LL | struct TupleStruct(); - | --------------------- the tuple struct `TupleStruct` is defined here -... -LL | TupleStruct => {} - | ^^^^^^^^^^^ - | | - | cannot be named the same as a tuple struct - | help: try specify the pattern arguments: `TupleStruct(..)` - -error[E0530]: match bindings cannot shadow tuple variants - --> $DIR/pattern-binding-disambiguation.rs:33:9 - | -LL | use E::*; - | ---- the tuple variant `TupleVariant` is imported here -... -LL | TupleVariant => {} - | ^^^^^^^^^^^^ - | | - | cannot be named the same as a tuple variant - | help: try specify the pattern arguments: `TupleVariant(..)` - -error[E0530]: match bindings cannot shadow statics - --> $DIR/pattern-binding-disambiguation.rs:42:9 - | -LL | static STATIC: () = (); - | ----------------------- the static `STATIC` is defined here -... -LL | STATIC => {} - | ^^^^^^ cannot be named the same as a static - -error[E0530]: let bindings cannot shadow tuple structs - --> $DIR/pattern-binding-disambiguation.rs:49:9 - | -LL | struct TupleStruct(); - | --------------------- the tuple struct `TupleStruct` is defined here -... -LL | let TupleStruct = doesnt_matter; - | ^^^^^^^^^^^ cannot be named the same as a tuple struct - -error[E0530]: let bindings cannot shadow tuple variants - --> $DIR/pattern-binding-disambiguation.rs:52:9 - | -LL | use E::*; - | ---- the tuple variant `TupleVariant` is imported here -... -LL | let TupleVariant = doesnt_matter; - | ^^^^^^^^^^^^ cannot be named the same as a tuple variant - -error[E0530]: let bindings cannot shadow statics - --> $DIR/pattern-binding-disambiguation.rs:55:9 - | -LL | static STATIC: () = (); - | ----------------------- the static `STATIC` is defined here -... -LL | let STATIC = doesnt_matter; - | ^^^^^^ cannot be named the same as a static - -error: aborting due to 6 previous errors - -For more information about this error, try `rustc --explain E0530`. diff --git a/src/test/ui/pattern/pattern-error-continue.rs b/src/test/ui/pattern/pattern-error-continue.rs deleted file mode 100644 index 0702a9986..000000000 --- a/src/test/ui/pattern/pattern-error-continue.rs +++ /dev/null @@ -1,35 +0,0 @@ -// Test that certain pattern-match type errors are non-fatal - -enum A { - B(isize, isize), - C(isize, isize, isize), - D -} - -struct S { - a: isize -} - -fn f(_c: char) {} - -fn main() { - match A::B(1, 2) { - A::B(_, _, _) => (), //~ ERROR this pattern has 3 fields, but - A::D(_) => (), //~ ERROR expected tuple struct or tuple variant, found unit variant `A::D` - _ => () - } - match 'c' { - S { .. } => (), - //~^ ERROR mismatched types - //~| expected `char`, found struct `S` - - _ => () - } - f(true); - //~^ ERROR mismatched types - //~| expected `char`, found `bool` - - match () { - E::V => {} //~ ERROR failed to resolve: use of undeclared type `E` - } -} diff --git a/src/test/ui/pattern/pattern-error-continue.stderr b/src/test/ui/pattern/pattern-error-continue.stderr deleted file mode 100644 index 4c2eff63a..000000000 --- a/src/test/ui/pattern/pattern-error-continue.stderr +++ /dev/null @@ -1,62 +0,0 @@ -error[E0433]: failed to resolve: use of undeclared type `E` - --> $DIR/pattern-error-continue.rs:33:9 - | -LL | E::V => {} - | ^ use of undeclared type `E` - -error[E0532]: expected tuple struct or tuple variant, found unit variant `A::D` - --> $DIR/pattern-error-continue.rs:18:9 - | -LL | B(isize, isize), - | --------------- similarly named tuple variant `B` defined here -LL | C(isize, isize, isize), -LL | D - | - `A::D` defined here -... -LL | A::D(_) => (), - | ^^^^^^^ - | -help: use this syntax instead - | -LL | A::D => (), - | ~~~~ -help: a tuple variant with a similar name exists - | -LL | A::B(_) => (), - | ~ - -error[E0023]: this pattern has 3 fields, but the corresponding tuple variant has 2 fields - --> $DIR/pattern-error-continue.rs:17:14 - | -LL | B(isize, isize), - | ----- ----- tuple variant has 2 fields -... -LL | A::B(_, _, _) => (), - | ^ ^ ^ expected 2 fields, found 3 - -error[E0308]: mismatched types - --> $DIR/pattern-error-continue.rs:22:9 - | -LL | match 'c' { - | --- this expression has type `char` -LL | S { .. } => (), - | ^^^^^^^^ expected `char`, found struct `S` - -error[E0308]: mismatched types - --> $DIR/pattern-error-continue.rs:28:7 - | -LL | f(true); - | - ^^^^ expected `char`, found `bool` - | | - | arguments to this function are incorrect - | -note: function defined here - --> $DIR/pattern-error-continue.rs:13:4 - | -LL | fn f(_c: char) {} - | ^ -------- - -error: aborting due to 5 previous errors - -Some errors have detailed explanations: E0023, E0308, E0433, E0532. -For more information about an error, try `rustc --explain E0023`. diff --git a/src/test/ui/pattern/pattern-ident-path-generics.rs b/src/test/ui/pattern/pattern-ident-path-generics.rs deleted file mode 100644 index 48c02623f..000000000 --- a/src/test/ui/pattern/pattern-ident-path-generics.rs +++ /dev/null @@ -1,6 +0,0 @@ -fn main() { - match Some("foo") { - None::<isize> => {} //~ ERROR mismatched types - Some(_) => {} - } -} diff --git a/src/test/ui/pattern/pattern-ident-path-generics.stderr b/src/test/ui/pattern/pattern-ident-path-generics.stderr deleted file mode 100644 index 01b082bd3..000000000 --- a/src/test/ui/pattern/pattern-ident-path-generics.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/pattern-ident-path-generics.rs:3:9 - | -LL | match Some("foo") { - | ----------- this expression has type `Option<&str>` -LL | None::<isize> => {} - | ^^^^^^^^^^^^^ expected `&str`, found `isize` - | - = note: expected enum `Option<&str>` - found enum `Option<isize>` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/pattern/pattern-tyvar-2.rs b/src/test/ui/pattern/pattern-tyvar-2.rs deleted file mode 100644 index 7647c766e..000000000 --- a/src/test/ui/pattern/pattern-tyvar-2.rs +++ /dev/null @@ -1,6 +0,0 @@ -enum Bar { T1((), Option<Vec<isize>>), T2, } - -fn foo(t: Bar) -> isize { match t { Bar::T1(_, Some(x)) => { return x * 3; } _ => { panic!(); } } } -//~^ ERROR cannot multiply `Vec<isize>` by `{integer}` - -fn main() { } diff --git a/src/test/ui/pattern/pattern-tyvar-2.stderr b/src/test/ui/pattern/pattern-tyvar-2.stderr deleted file mode 100644 index 121817e70..000000000 --- a/src/test/ui/pattern/pattern-tyvar-2.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0369]: cannot multiply `Vec<isize>` by `{integer}` - --> $DIR/pattern-tyvar-2.rs:3:71 - | -LL | fn foo(t: Bar) -> isize { match t { Bar::T1(_, Some(x)) => { return x * 3; } _ => { panic!(); } } } - | - ^ - {integer} - | | - | Vec<isize> - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0369`. diff --git a/src/test/ui/pattern/pattern-tyvar.rs b/src/test/ui/pattern/pattern-tyvar.rs deleted file mode 100644 index e2cbf0519..000000000 --- a/src/test/ui/pattern/pattern-tyvar.rs +++ /dev/null @@ -1,12 +0,0 @@ -enum Bar { T1((), Option<Vec<isize>>), T2 } - -fn foo(t: Bar) { - match t { - Bar::T1(_, Some::<isize>(x)) => { //~ ERROR mismatched types - println!("{}", x); - } - _ => { panic!(); } - } -} - -fn main() { } diff --git a/src/test/ui/pattern/pattern-tyvar.stderr b/src/test/ui/pattern/pattern-tyvar.stderr deleted file mode 100644 index f1e2a9d72..000000000 --- a/src/test/ui/pattern/pattern-tyvar.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/pattern-tyvar.rs:5:18 - | -LL | match t { - | - this expression has type `Bar` -LL | Bar::T1(_, Some::<isize>(x)) => { - | ^^^^^^^^^^^^^^^^ expected struct `Vec`, found `isize` - | - = note: expected enum `Option<Vec<isize>>` - found enum `Option<isize>` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/pattern/rest-pat-semantic-disallowed.rs b/src/test/ui/pattern/rest-pat-semantic-disallowed.rs deleted file mode 100644 index 156285e0f..000000000 --- a/src/test/ui/pattern/rest-pat-semantic-disallowed.rs +++ /dev/null @@ -1,83 +0,0 @@ -// Here we test that rest patterns, i.e. `..`, are not allowed -// outside of slice (+ ident patterns within those), tuple, -// and tuple struct patterns and that duplicates are caught in these contexts. - -#![feature(box_patterns)] - -fn main() {} - -macro_rules! mk_pat { - () => { .. } //~ ERROR `..` patterns are not allowed here -} - -fn rest_patterns() { - let mk_pat!(); - - // Top level: - fn foo(..: u8) {} //~ ERROR `..` patterns are not allowed here - let ..; //~ ERROR `..` patterns are not allowed here - - // Box patterns: - let box ..; //~ ERROR `..` patterns are not allowed here - - // In or-patterns: - match 1 { - 1 | .. => {} //~ ERROR `..` patterns are not allowed here - } - - // Ref patterns: - let &..; //~ ERROR `..` patterns are not allowed here - let &mut ..; //~ ERROR `..` patterns are not allowed here - - // Ident patterns: - let x @ ..; //~ ERROR `..` patterns are not allowed here - //~^ ERROR type annotations needed - let ref x @ ..; //~ ERROR `..` patterns are not allowed here - let ref mut x @ ..; //~ ERROR `..` patterns are not allowed here - - // Tuple: - let (..): (u8,); // OK. - let (..,): (u8,); // OK. - let ( - .., - .., //~ ERROR `..` can only be used once per tuple pattern - .. //~ ERROR `..` can only be used once per tuple pattern - ): (u8, u8, u8); - let ( - .., - x, - .. //~ ERROR `..` can only be used once per tuple pattern - ): (u8, u8, u8); - - struct A(u8, u8, u8); - - // Tuple struct (same idea as for tuple patterns): - let A(..); // OK. - let A(..,); // OK. - let A( - .., - .., //~ ERROR `..` can only be used once per tuple struct pattern - .. //~ ERROR `..` can only be used once per tuple struct pattern - ); - let A( - .., - x, - .. //~ ERROR `..` can only be used once per tuple struct pattern - ); - - // Array/Slice: - let [..]: &[u8]; // OK. - let [..,]: &[u8]; // OK. - let [ - .., - .., //~ ERROR `..` can only be used once per slice pattern - .. //~ ERROR `..` can only be used once per slice pattern - ]: &[u8]; - let [ - .., - ref x @ .., //~ ERROR `..` can only be used once per slice pattern - ref mut y @ .., //~ ERROR `..` can only be used once per slice pattern - (ref z @ ..), //~ ERROR `..` patterns are not allowed here - .. //~ ERROR `..` can only be used once per slice pattern - ]: &[u8]; -} diff --git a/src/test/ui/pattern/rest-pat-semantic-disallowed.stderr b/src/test/ui/pattern/rest-pat-semantic-disallowed.stderr deleted file mode 100644 index e6a4e5f19..000000000 --- a/src/test/ui/pattern/rest-pat-semantic-disallowed.stderr +++ /dev/null @@ -1,201 +0,0 @@ -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:10:13 - | -LL | () => { .. } - | ^^ -... -LL | let mk_pat!(); - | --------- in this macro invocation - | - = note: only allowed in tuple, tuple struct, and slice patterns - = note: this error originates in the macro `mk_pat` (in Nightly builds, run with -Z macro-backtrace for more info) - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:18:9 - | -LL | let ..; - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:21:13 - | -LL | let box ..; - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:25:13 - | -LL | 1 | .. => {} - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:29:10 - | -LL | let &..; - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:30:14 - | -LL | let &mut ..; - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:33:13 - | -LL | let x @ ..; - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:35:17 - | -LL | let ref x @ ..; - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:36:21 - | -LL | let ref mut x @ ..; - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` can only be used once per tuple pattern - --> $DIR/rest-pat-semantic-disallowed.rs:43:9 - | -LL | .., - | -- previously used here -LL | .., - | ^^ can only be used once per tuple pattern - -error: `..` can only be used once per tuple pattern - --> $DIR/rest-pat-semantic-disallowed.rs:44:9 - | -LL | .., - | -- previously used here -LL | .., -LL | .. - | ^^ can only be used once per tuple pattern - -error: `..` can only be used once per tuple pattern - --> $DIR/rest-pat-semantic-disallowed.rs:49:9 - | -LL | .., - | -- previously used here -LL | x, -LL | .. - | ^^ can only be used once per tuple pattern - -error: `..` can only be used once per tuple struct pattern - --> $DIR/rest-pat-semantic-disallowed.rs:59:9 - | -LL | .., - | -- previously used here -LL | .., - | ^^ can only be used once per tuple struct pattern - -error: `..` can only be used once per tuple struct pattern - --> $DIR/rest-pat-semantic-disallowed.rs:60:9 - | -LL | .., - | -- previously used here -LL | .., -LL | .. - | ^^ can only be used once per tuple struct pattern - -error: `..` can only be used once per tuple struct pattern - --> $DIR/rest-pat-semantic-disallowed.rs:65:9 - | -LL | .., - | -- previously used here -LL | x, -LL | .. - | ^^ can only be used once per tuple struct pattern - -error: `..` can only be used once per slice pattern - --> $DIR/rest-pat-semantic-disallowed.rs:73:9 - | -LL | .., - | -- previously used here -LL | .., - | ^^ can only be used once per slice pattern - -error: `..` can only be used once per slice pattern - --> $DIR/rest-pat-semantic-disallowed.rs:74:9 - | -LL | .., - | -- previously used here -LL | .., -LL | .. - | ^^ can only be used once per slice pattern - -error: `..` can only be used once per slice pattern - --> $DIR/rest-pat-semantic-disallowed.rs:78:17 - | -LL | .., - | -- previously used here -LL | ref x @ .., - | ^^ can only be used once per slice pattern - -error: `..` can only be used once per slice pattern - --> $DIR/rest-pat-semantic-disallowed.rs:79:21 - | -LL | .., - | -- previously used here -LL | ref x @ .., -LL | ref mut y @ .., - | ^^ can only be used once per slice pattern - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:80:18 - | -LL | (ref z @ ..), - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error: `..` can only be used once per slice pattern - --> $DIR/rest-pat-semantic-disallowed.rs:81:9 - | -LL | .., - | -- previously used here -... -LL | .. - | ^^ can only be used once per slice pattern - -error: `..` patterns are not allowed here - --> $DIR/rest-pat-semantic-disallowed.rs:17:12 - | -LL | fn foo(..: u8) {} - | ^^ - | - = note: only allowed in tuple, tuple struct, and slice patterns - -error[E0282]: type annotations needed - --> $DIR/rest-pat-semantic-disallowed.rs:33:9 - | -LL | let x @ ..; - | ^^^^^^ - | -help: consider giving this pattern a type - | -LL | let x @ ..: _; - | +++ - -error: aborting due to 23 previous errors - -For more information about this error, try `rustc --explain E0282`. diff --git a/src/test/ui/pattern/rest-pat-syntactic.rs b/src/test/ui/pattern/rest-pat-syntactic.rs deleted file mode 100644 index 4da5a2db7..000000000 --- a/src/test/ui/pattern/rest-pat-syntactic.rs +++ /dev/null @@ -1,73 +0,0 @@ -// Here we test that `..` is allowed in all pattern locations *syntactically*. -// The semantic test is in `rest-pat-semantic-disallowed.rs`. - -// check-pass - -fn main() {} - -macro_rules! accept_pat { - ($p:pat) => {} -} - -accept_pat!(..); - -#[cfg(FALSE)] -fn rest_patterns() { - // Top level: - fn foo(..: u8) {} - let ..; - - // Box patterns: - let box ..; - //~^ WARN box pattern syntax is experimental - //~| WARN unstable syntax - - // In or-patterns: - match x { - .. | .. => {} - } - - // Ref patterns: - let &..; - let &mut ..; - - // Ident patterns: - let x @ ..; - let ref x @ ..; - let ref mut x @ ..; - - // Tuple: - let (..); // This is interpreted as a tuple pattern, not a parenthesis one. - let (..,); // Allowing trailing comma. - let (.., .., ..); // Duplicates also. - let (.., P, ..); // Including with things in between. - - // Tuple struct (same idea as for tuple patterns): - let A(..); - let A(..,); - let A(.., .., ..); - let A(.., P, ..); - - // Array/Slice (like with tuple patterns): - let [..]; - let [..,]; - let [.., .., ..]; - let [.., P, ..]; - - // Random walk to guard against special casing: - match x { - .. | - [ - ( - box .., //~ WARN box pattern syntax is experimental - &(..), - &mut .., - x @ .. - ), - ref x @ .., - ] | - ref mut x @ .. - => {} - } - //~| WARN unstable syntax -} diff --git a/src/test/ui/pattern/rest-pat-syntactic.stderr b/src/test/ui/pattern/rest-pat-syntactic.stderr deleted file mode 100644 index 37019b7d5..000000000 --- a/src/test/ui/pattern/rest-pat-syntactic.stderr +++ /dev/null @@ -1,24 +0,0 @@ -warning: box pattern syntax is experimental - --> $DIR/rest-pat-syntactic.rs:21:9 - | -LL | let box ..; - | ^^^^^^ - | - = note: see issue #29641 <https://github.com/rust-lang/rust/issues/29641> for more information - = help: add `#![feature(box_patterns)]` to the crate attributes to enable - = warning: unstable syntax can change at any point in the future, causing a hard error! - = note: for more information, see issue #65860 <https://github.com/rust-lang/rust/issues/65860> - -warning: box pattern syntax is experimental - --> $DIR/rest-pat-syntactic.rs:62:17 - | -LL | box .., - | ^^^^^^ - | - = note: see issue #29641 <https://github.com/rust-lang/rust/issues/29641> for more information - = help: add `#![feature(box_patterns)]` to the crate attributes to enable - = warning: unstable syntax can change at any point in the future, causing a hard error! - = note: for more information, see issue #65860 <https://github.com/rust-lang/rust/issues/65860> - -warning: 2 warnings emitted - diff --git a/src/test/ui/pattern/size-and-align.rs b/src/test/ui/pattern/size-and-align.rs deleted file mode 100644 index a32b5de72..000000000 --- a/src/test/ui/pattern/size-and-align.rs +++ /dev/null @@ -1,20 +0,0 @@ -// run-pass - -#![allow(non_camel_case_types)] -enum clam<T> { a(T, isize), b, } - -fn uhoh<T>(v: Vec<clam<T>> ) { - match v[1] { - clam::a::<T>(ref _t, ref u) => { - println!("incorrect"); - println!("{}", u); - panic!(); - } - clam::b::<T> => { println!("correct"); } - } -} - -pub fn main() { - let v: Vec<clam<isize>> = vec![clam::b::<isize>, clam::b::<isize>, clam::a::<isize>(42, 17)]; - uhoh::<isize>(v); -} diff --git a/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.fixed b/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.fixed deleted file mode 100644 index b28dce881..000000000 --- a/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.fixed +++ /dev/null @@ -1,10 +0,0 @@ -// run-rustfix - -fn main() { - match Some(1) { //~ ERROR non-exhaustive patterns: `None` not covered - Some(1) => {} - // hello - Some(_) => {} - None => todo!() - } -} diff --git a/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.rs b/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.rs deleted file mode 100644 index 42493a632..000000000 --- a/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.rs +++ /dev/null @@ -1,9 +0,0 @@ -// run-rustfix - -fn main() { - match Some(1) { //~ ERROR non-exhaustive patterns: `None` not covered - Some(1) => {} - // hello - Some(_) => {} - } -} diff --git a/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.stderr b/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.stderr deleted file mode 100644 index f3dca9bcb..000000000 --- a/src/test/ui/pattern/suggest-adding-appropriate-missing-pattern-excluding-comments.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error[E0004]: non-exhaustive patterns: `None` not covered - --> $DIR/suggest-adding-appropriate-missing-pattern-excluding-comments.rs:4:11 - | -LL | match Some(1) { - | ^^^^^^^ pattern `None` not covered - | -note: `Option<i32>` defined here - --> $SRC_DIR/core/src/option.rs:LL:COL - | -LL | pub enum Option<T> { - | ------------------ -... -LL | None, - | ^^^^ not covered - = note: the matched value is of type `Option<i32>` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ Some(_) => {} -LL + None => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/always-inhabited-union-ref.rs b/src/test/ui/pattern/usefulness/always-inhabited-union-ref.rs deleted file mode 100644 index 7d1cac8a4..000000000 --- a/src/test/ui/pattern/usefulness/always-inhabited-union-ref.rs +++ /dev/null @@ -1,32 +0,0 @@ -// The precise semantics of inhabitedness with respect to unions and references is currently -// undecided. This test file currently checks a conservative choice. - -#![feature(exhaustive_patterns)] -#![feature(never_type)] - -#![allow(dead_code)] -#![allow(unreachable_code)] - -pub union Foo { - foo: !, -} - -fn uninhab_ref() -> &'static ! { - unimplemented!() -} - -fn uninhab_union() -> Foo { - unimplemented!() -} - -fn match_on_uninhab() { - match uninhab_ref() { - //~^ ERROR non-exhaustive patterns: type `&!` is non-empty - } - - match uninhab_union() { - //~^ ERROR non-exhaustive patterns: type `Foo` is non-empty - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/always-inhabited-union-ref.stderr b/src/test/ui/pattern/usefulness/always-inhabited-union-ref.stderr deleted file mode 100644 index cd5c283f9..000000000 --- a/src/test/ui/pattern/usefulness/always-inhabited-union-ref.stderr +++ /dev/null @@ -1,37 +0,0 @@ -error[E0004]: non-exhaustive patterns: type `&!` is non-empty - --> $DIR/always-inhabited-union-ref.rs:23:11 - | -LL | match uninhab_ref() { - | ^^^^^^^^^^^^^ - | - = note: the matched value is of type `&!` - = note: references are always considered inhabited -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown - | -LL ~ match uninhab_ref() { -LL + _ => todo!(), -LL + } - | - -error[E0004]: non-exhaustive patterns: type `Foo` is non-empty - --> $DIR/always-inhabited-union-ref.rs:27:11 - | -LL | match uninhab_union() { - | ^^^^^^^^^^^^^^^ - | -note: `Foo` defined here - --> $DIR/always-inhabited-union-ref.rs:10:11 - | -LL | pub union Foo { - | ^^^ - = note: the matched value is of type `Foo` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown - | -LL ~ match uninhab_union() { -LL + _ => todo!(), -LL + } - | - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/auxiliary/empty.rs b/src/test/ui/pattern/usefulness/auxiliary/empty.rs deleted file mode 100644 index 29a03c9e8..000000000 --- a/src/test/ui/pattern/usefulness/auxiliary/empty.rs +++ /dev/null @@ -1,10 +0,0 @@ -#![crate_type = "rlib"] -pub enum EmptyForeignEnum {} - -pub struct VisiblyUninhabitedForeignStruct { - pub field: EmptyForeignEnum, -} - -pub struct SecretlyUninhabitedForeignStruct { - _priv: EmptyForeignEnum, -} diff --git a/src/test/ui/pattern/usefulness/auxiliary/hidden.rs b/src/test/ui/pattern/usefulness/auxiliary/hidden.rs deleted file mode 100644 index 364514ba1..000000000 --- a/src/test/ui/pattern/usefulness/auxiliary/hidden.rs +++ /dev/null @@ -1,14 +0,0 @@ -pub enum HiddenEnum { - A, - B, - #[doc(hidden)] - C, -} - -#[derive(Default)] -pub struct HiddenStruct { - pub one: u8, - pub two: bool, - #[doc(hidden)] - pub hide: usize, -} diff --git a/src/test/ui/pattern/usefulness/auxiliary/unstable.rs b/src/test/ui/pattern/usefulness/auxiliary/unstable.rs deleted file mode 100644 index a06b3a6e4..000000000 --- a/src/test/ui/pattern/usefulness/auxiliary/unstable.rs +++ /dev/null @@ -1,23 +0,0 @@ -#![feature(staged_api)] -#![stable(feature = "stable_test_feature", since = "1.0.0")] - -#[stable(feature = "stable_test_feature", since = "1.0.0")] -pub enum UnstableEnum { - #[stable(feature = "stable_test_feature", since = "1.0.0")] - Stable, - #[stable(feature = "stable_test_feature", since = "1.0.0")] - Stable2, - #[unstable(feature = "unstable_test_feature", issue = "none")] - Unstable, -} - -#[derive(Default)] -#[stable(feature = "stable_test_feature", since = "1.0.0")] -pub struct UnstableStruct { - #[stable(feature = "stable_test_feature", since = "1.0.0")] - pub stable: bool, - #[stable(feature = "stable_test_feature", since = "1.0.0")] - pub stable2: usize, - #[unstable(feature = "unstable_test_feature", issue = "none")] - pub unstable: u8, -} diff --git a/src/test/ui/pattern/usefulness/const-partial_eq-fallback-ice.rs b/src/test/ui/pattern/usefulness/const-partial_eq-fallback-ice.rs deleted file mode 100644 index 02599d7c0..000000000 --- a/src/test/ui/pattern/usefulness/const-partial_eq-fallback-ice.rs +++ /dev/null @@ -1,18 +0,0 @@ -#![allow(warnings)] - -struct MyType; - -impl PartialEq<usize> for MyType { - fn eq(&self, y: &usize) -> bool { - true - } -} - -const CONSTANT: &&MyType = &&MyType; - -fn main() { - if let CONSTANT = &&MyType { - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - println!("did match!"); - } -} diff --git a/src/test/ui/pattern/usefulness/const-partial_eq-fallback-ice.stderr b/src/test/ui/pattern/usefulness/const-partial_eq-fallback-ice.stderr deleted file mode 100644 index 358421cd6..000000000 --- a/src/test/ui/pattern/usefulness/const-partial_eq-fallback-ice.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: to use a constant of type `MyType` in a pattern, `MyType` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/const-partial_eq-fallback-ice.rs:14:12 - | -LL | if let CONSTANT = &&MyType { - | ^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/usefulness/const-pat-ice.rs b/src/test/ui/pattern/usefulness/const-pat-ice.rs deleted file mode 100644 index abfacf393..000000000 --- a/src/test/ui/pattern/usefulness/const-pat-ice.rs +++ /dev/null @@ -1,11 +0,0 @@ -// check-pass - -const FOO: &&&u32 = &&&42; - -fn main() { - match unimplemented!() { - &&&42 => {}, - FOO => {}, - _ => {}, - } -} diff --git a/src/test/ui/pattern/usefulness/const-private-fields.rs b/src/test/ui/pattern/usefulness/const-private-fields.rs deleted file mode 100644 index 06c832ca4..000000000 --- a/src/test/ui/pattern/usefulness/const-private-fields.rs +++ /dev/null @@ -1,30 +0,0 @@ -// check-pass -// -// Check that we don't ignore private fields in usefulness checking -#![deny(unreachable_patterns)] - -mod inner { - #[derive(PartialEq, Eq)] - pub struct PrivateField { - pub x: bool, - y: bool, - } - - pub const FOO: PrivateField = PrivateField { x: true, y: true }; - pub const BAR: PrivateField = PrivateField { x: true, y: false }; -} -use inner::*; - -fn main() { - match FOO { - FOO => {} - BAR => {} - _ => {} - } - - match FOO { - FOO => {} - PrivateField { x: true, .. } => {} - _ => {} - } -} diff --git a/src/test/ui/pattern/usefulness/consts-opaque.rs b/src/test/ui/pattern/usefulness/consts-opaque.rs deleted file mode 100644 index ca4fcd85b..000000000 --- a/src/test/ui/pattern/usefulness/consts-opaque.rs +++ /dev/null @@ -1,145 +0,0 @@ -// This file tests the exhaustiveness algorithm on opaque constants. Most of the examples give -// unnecessary warnings because const_to_pat.rs converts a constant pattern to a wildcard when the -// constant is not allowed as a pattern. This is an edge case so we may not care to fix it. -// See also https://github.com/rust-lang/rust/issues/78057 - -#![deny(unreachable_patterns)] - -#[derive(PartialEq)] -struct Foo(i32); -impl Eq for Foo {} -const FOO: Foo = Foo(42); -const FOO_REF: &Foo = &Foo(42); -const FOO_REF_REF: &&Foo = &&Foo(42); - -#[derive(PartialEq)] -struct Bar; -impl Eq for Bar {} -const BAR: Bar = Bar; - -#[derive(PartialEq)] -enum Baz { - Baz1, - Baz2 -} -impl Eq for Baz {} -const BAZ: Baz = Baz::Baz1; - -fn main() { - match FOO { - FOO => {} - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - _ => {} // should not be emitting unreachable warning - //~^ ERROR unreachable pattern - } - - match FOO_REF { - FOO_REF => {} - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - Foo(_) => {} // should not be emitting unreachable warning - //~^ ERROR unreachable pattern - } - - // This used to cause an ICE (https://github.com/rust-lang/rust/issues/78071) - match FOO_REF_REF { - FOO_REF_REF => {} - //~^ WARNING must be annotated with `#[derive(PartialEq, Eq)]` - //~| WARNING this was previously accepted by the compiler but is being phased out - Foo(_) => {} - } - - match BAR { - Bar => {} - BAR => {} // should not be emitting unreachable warning - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - //~| ERROR unreachable pattern - _ => {} - //~^ ERROR unreachable pattern - } - - match BAR { - BAR => {} - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - Bar => {} // should not be emitting unreachable warning - //~^ ERROR unreachable pattern - _ => {} - //~^ ERROR unreachable pattern - } - - match BAR { - BAR => {} - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - BAR => {} // should not be emitting unreachable warning - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - //~| ERROR unreachable pattern - _ => {} // should not be emitting unreachable warning - //~^ ERROR unreachable pattern - } - - match BAZ { - BAZ => {} - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - Baz::Baz1 => {} // should not be emitting unreachable warning - //~^ ERROR unreachable pattern - _ => {} - //~^ ERROR unreachable pattern - } - - match BAZ { - Baz::Baz1 => {} - BAZ => {} - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - _ => {} - //~^ ERROR unreachable pattern - } - - match BAZ { - BAZ => {} - //~^ ERROR must be annotated with `#[derive(PartialEq, Eq)]` - Baz::Baz2 => {} // should not be emitting unreachable warning - //~^ ERROR unreachable pattern - _ => {} // should not be emitting unreachable warning - //~^ ERROR unreachable pattern - } - - type Quux = fn(usize, usize) -> usize; - fn quux(a: usize, b: usize) -> usize { a + b } - const QUUX: Quux = quux; - - match QUUX { - QUUX => {} - QUUX => {} - _ => {} - } - - #[derive(PartialEq, Eq)] - struct Wrap<T>(T); - const WRAPQUUX: Wrap<Quux> = Wrap(quux); - - match WRAPQUUX { - WRAPQUUX => {} - WRAPQUUX => {} - Wrap(_) => {} - } - - match WRAPQUUX { - Wrap(_) => {} - WRAPQUUX => {} // detected unreachable because we do inspect the `Wrap` layer - //~^ ERROR unreachable pattern - } - - #[derive(PartialEq, Eq)] - enum WhoKnows<T> { - Yay(T), - Nope, - }; - const WHOKNOWSQUUX: WhoKnows<Quux> = WhoKnows::Yay(quux); - - match WHOKNOWSQUUX { - WHOKNOWSQUUX => {} - WhoKnows::Yay(_) => {} - WHOKNOWSQUUX => {} // detected unreachable because we do inspect the `WhoKnows` layer - //~^ ERROR unreachable pattern - WhoKnows::Nope => {} - } -} diff --git a/src/test/ui/pattern/usefulness/consts-opaque.stderr b/src/test/ui/pattern/usefulness/consts-opaque.stderr deleted file mode 100644 index 35396751a..000000000 --- a/src/test/ui/pattern/usefulness/consts-opaque.stderr +++ /dev/null @@ -1,202 +0,0 @@ -error: to use a constant of type `Foo` in a pattern, `Foo` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:30:9 - | -LL | FOO => {} - | ^^^ - -error: unreachable pattern - --> $DIR/consts-opaque.rs:32:9 - | -LL | FOO => {} - | --- matches any value -LL | -LL | _ => {} // should not be emitting unreachable warning - | ^ unreachable pattern - | -note: the lint level is defined here - --> $DIR/consts-opaque.rs:6:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: to use a constant of type `Foo` in a pattern, `Foo` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:37:9 - | -LL | FOO_REF => {} - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/consts-opaque.rs:39:9 - | -LL | FOO_REF => {} - | ------- matches any value -LL | -LL | Foo(_) => {} // should not be emitting unreachable warning - | ^^^^^^ unreachable pattern - -warning: to use a constant of type `Foo` in a pattern, `Foo` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:45:9 - | -LL | FOO_REF_REF => {} - | ^^^^^^^^^^^ - | - = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - = note: for more information, see issue #62411 <https://github.com/rust-lang/rust/issues/62411> - = note: `#[warn(indirect_structural_match)]` on by default - -error: to use a constant of type `Bar` in a pattern, `Bar` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:53:9 - | -LL | BAR => {} // should not be emitting unreachable warning - | ^^^ - -error: unreachable pattern - --> $DIR/consts-opaque.rs:53:9 - | -LL | Bar => {} - | --- matches any value -LL | BAR => {} // should not be emitting unreachable warning - | ^^^ unreachable pattern - -error: unreachable pattern - --> $DIR/consts-opaque.rs:56:9 - | -LL | Bar => {} - | --- matches any value -... -LL | _ => {} - | ^ unreachable pattern - -error: to use a constant of type `Bar` in a pattern, `Bar` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:61:9 - | -LL | BAR => {} - | ^^^ - -error: unreachable pattern - --> $DIR/consts-opaque.rs:63:9 - | -LL | BAR => {} - | --- matches any value -LL | -LL | Bar => {} // should not be emitting unreachable warning - | ^^^ unreachable pattern - -error: unreachable pattern - --> $DIR/consts-opaque.rs:65:9 - | -LL | BAR => {} - | --- matches any value -... -LL | _ => {} - | ^ unreachable pattern - -error: to use a constant of type `Bar` in a pattern, `Bar` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:70:9 - | -LL | BAR => {} - | ^^^ - -error: to use a constant of type `Bar` in a pattern, `Bar` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:72:9 - | -LL | BAR => {} // should not be emitting unreachable warning - | ^^^ - -error: unreachable pattern - --> $DIR/consts-opaque.rs:72:9 - | -LL | BAR => {} - | --- matches any value -LL | -LL | BAR => {} // should not be emitting unreachable warning - | ^^^ unreachable pattern - -error: unreachable pattern - --> $DIR/consts-opaque.rs:75:9 - | -LL | BAR => {} - | --- matches any value -... -LL | _ => {} // should not be emitting unreachable warning - | ^ unreachable pattern - -error: to use a constant of type `Baz` in a pattern, `Baz` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:80:9 - | -LL | BAZ => {} - | ^^^ - -error: unreachable pattern - --> $DIR/consts-opaque.rs:82:9 - | -LL | BAZ => {} - | --- matches any value -LL | -LL | Baz::Baz1 => {} // should not be emitting unreachable warning - | ^^^^^^^^^ unreachable pattern - -error: unreachable pattern - --> $DIR/consts-opaque.rs:84:9 - | -LL | BAZ => {} - | --- matches any value -... -LL | _ => {} - | ^ unreachable pattern - -error: to use a constant of type `Baz` in a pattern, `Baz` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:90:9 - | -LL | BAZ => {} - | ^^^ - -error: unreachable pattern - --> $DIR/consts-opaque.rs:92:9 - | -LL | BAZ => {} - | --- matches any value -LL | -LL | _ => {} - | ^ unreachable pattern - -error: to use a constant of type `Baz` in a pattern, `Baz` must be annotated with `#[derive(PartialEq, Eq)]` - --> $DIR/consts-opaque.rs:97:9 - | -LL | BAZ => {} - | ^^^ - -error: unreachable pattern - --> $DIR/consts-opaque.rs:99:9 - | -LL | BAZ => {} - | --- matches any value -LL | -LL | Baz::Baz2 => {} // should not be emitting unreachable warning - | ^^^^^^^^^ unreachable pattern - -error: unreachable pattern - --> $DIR/consts-opaque.rs:101:9 - | -LL | BAZ => {} - | --- matches any value -... -LL | _ => {} // should not be emitting unreachable warning - | ^ unreachable pattern - -error: unreachable pattern - --> $DIR/consts-opaque.rs:127:9 - | -LL | Wrap(_) => {} - | ------- matches any value -LL | WRAPQUUX => {} // detected unreachable because we do inspect the `Wrap` layer - | ^^^^^^^^ unreachable pattern - -error: unreachable pattern - --> $DIR/consts-opaque.rs:141:9 - | -LL | WHOKNOWSQUUX => {} // detected unreachable because we do inspect the `WhoKnows` layer - | ^^^^^^^^^^^^ - -error: aborting due to 24 previous errors; 1 warning emitted - diff --git a/src/test/ui/pattern/usefulness/deny-irrefutable-let-patterns.rs b/src/test/ui/pattern/usefulness/deny-irrefutable-let-patterns.rs deleted file mode 100644 index c85af7f3b..000000000 --- a/src/test/ui/pattern/usefulness/deny-irrefutable-let-patterns.rs +++ /dev/null @@ -1,16 +0,0 @@ -#![feature(if_let_guard)] - -#![deny(irrefutable_let_patterns)] - -fn main() { - if let _ = 5 {} //~ ERROR irrefutable `if let` pattern - - while let _ = 5 { //~ ERROR irrefutable `while let` pattern - break; - } - - match 5 { - _ if let _ = 2 => {} //~ ERROR irrefutable `if let` guard pattern - _ => {} - } -} diff --git a/src/test/ui/pattern/usefulness/deny-irrefutable-let-patterns.stderr b/src/test/ui/pattern/usefulness/deny-irrefutable-let-patterns.stderr deleted file mode 100644 index cdb6b5c7a..000000000 --- a/src/test/ui/pattern/usefulness/deny-irrefutable-let-patterns.stderr +++ /dev/null @@ -1,34 +0,0 @@ -error: irrefutable `if let` pattern - --> $DIR/deny-irrefutable-let-patterns.rs:6:8 - | -LL | if let _ = 5 {} - | ^^^^^^^^^ - | - = note: this pattern will always match, so the `if let` is useless - = help: consider replacing the `if let` with a `let` -note: the lint level is defined here - --> $DIR/deny-irrefutable-let-patterns.rs:3:9 - | -LL | #![deny(irrefutable_let_patterns)] - | ^^^^^^^^^^^^^^^^^^^^^^^^ - -error: irrefutable `while let` pattern - --> $DIR/deny-irrefutable-let-patterns.rs:8:11 - | -LL | while let _ = 5 { - | ^^^^^^^^^ - | - = note: this pattern will always match, so the loop will never exit - = help: consider instead using a `loop { ... }` with a `let` inside it - -error: irrefutable `if let` guard pattern - --> $DIR/deny-irrefutable-let-patterns.rs:13:18 - | -LL | _ if let _ = 2 => {} - | ^ - | - = note: this pattern will always match, so the guard is useless - = help: consider removing the guard and adding a `let` inside the match arm - -error: aborting due to 3 previous errors - diff --git a/src/test/ui/pattern/usefulness/doc-hidden-fields.rs b/src/test/ui/pattern/usefulness/doc-hidden-fields.rs deleted file mode 100644 index 4163b87dc..000000000 --- a/src/test/ui/pattern/usefulness/doc-hidden-fields.rs +++ /dev/null @@ -1,26 +0,0 @@ -// aux-build:hidden.rs - -extern crate hidden; - -use hidden::HiddenStruct; - -struct InCrate { - a: usize, - b: bool, - #[doc(hidden)] - im_hidden: u8 -} - -fn main() { - let HiddenStruct { one, two } = HiddenStruct::default(); - //~^ pattern requires `..` due to inaccessible fields - - let HiddenStruct { one } = HiddenStruct::default(); - //~^ pattern does not mention field `two` and inaccessible fields - - let HiddenStruct { one, hide } = HiddenStruct::default(); - //~^ pattern does not mention field `two` - - let InCrate { a, b } = InCrate { a: 0, b: false, im_hidden: 0 }; - //~^ pattern does not mention field `im_hidden` -} diff --git a/src/test/ui/pattern/usefulness/doc-hidden-fields.stderr b/src/test/ui/pattern/usefulness/doc-hidden-fields.stderr deleted file mode 100644 index f277bfbc8..000000000 --- a/src/test/ui/pattern/usefulness/doc-hidden-fields.stderr +++ /dev/null @@ -1,59 +0,0 @@ -error: pattern requires `..` due to inaccessible fields - --> $DIR/doc-hidden-fields.rs:15:9 - | -LL | let HiddenStruct { one, two } = HiddenStruct::default(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^ - | -help: ignore the inaccessible and unused fields - | -LL | let HiddenStruct { one, two, .. } = HiddenStruct::default(); - | ++++ - -error[E0027]: pattern does not mention field `two` and inaccessible fields - --> $DIR/doc-hidden-fields.rs:18:9 - | -LL | let HiddenStruct { one } = HiddenStruct::default(); - | ^^^^^^^^^^^^^^^^^^^^ missing field `two` and inaccessible fields - | -help: include the missing field in the pattern and ignore the inaccessible fields - | -LL | let HiddenStruct { one, two, .. } = HiddenStruct::default(); - | ~~~~~~~~~~~ -help: if you don't care about this missing field, you can explicitly ignore it - | -LL | let HiddenStruct { one, .. } = HiddenStruct::default(); - | ~~~~~~ - -error[E0027]: pattern does not mention field `two` - --> $DIR/doc-hidden-fields.rs:21:9 - | -LL | let HiddenStruct { one, hide } = HiddenStruct::default(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ missing field `two` - | -help: include the missing field in the pattern - | -LL | let HiddenStruct { one, hide, two } = HiddenStruct::default(); - | ~~~~~~~ -help: if you don't care about this missing field, you can explicitly ignore it - | -LL | let HiddenStruct { one, hide, .. } = HiddenStruct::default(); - | ~~~~~~ - -error[E0027]: pattern does not mention field `im_hidden` - --> $DIR/doc-hidden-fields.rs:24:9 - | -LL | let InCrate { a, b } = InCrate { a: 0, b: false, im_hidden: 0 }; - | ^^^^^^^^^^^^^^^^ missing field `im_hidden` - | -help: include the missing field in the pattern - | -LL | let InCrate { a, b, im_hidden } = InCrate { a: 0, b: false, im_hidden: 0 }; - | ~~~~~~~~~~~~~ -help: if you don't care about this missing field, you can explicitly ignore it - | -LL | let InCrate { a, b, .. } = InCrate { a: 0, b: false, im_hidden: 0 }; - | ~~~~~~ - -error: aborting due to 4 previous errors - -For more information about this error, try `rustc --explain E0027`. diff --git a/src/test/ui/pattern/usefulness/doc-hidden-non-exhaustive.rs b/src/test/ui/pattern/usefulness/doc-hidden-non-exhaustive.rs deleted file mode 100644 index 5d4181a30..000000000 --- a/src/test/ui/pattern/usefulness/doc-hidden-non-exhaustive.rs +++ /dev/null @@ -1,43 +0,0 @@ -// aux-build:hidden.rs - -extern crate hidden; - -use hidden::HiddenEnum; - -enum InCrate { - A, - B, - #[doc(hidden)] - C, -} - -fn main() { - match HiddenEnum::A { - HiddenEnum::A => {} - HiddenEnum::B => {} - } - //~^^^^ non-exhaustive patterns: `_` not covered - - match HiddenEnum::A { - HiddenEnum::A => {} - HiddenEnum::C => {} - } - //~^^^^ non-exhaustive patterns: `HiddenEnum::B` not covered - - match HiddenEnum::A { - HiddenEnum::A => {} - } - //~^^^ non-exhaustive patterns: `HiddenEnum::B` and `_` not covered - - match None { - None => {} - Some(HiddenEnum::A) => {} - } - //~^^^^ non-exhaustive patterns: `Some(HiddenEnum::B)` and `Some(_)` not covered - - match InCrate::A { - InCrate::A => {} - InCrate::B => {} - } - //~^^^^ non-exhaustive patterns: `InCrate::C` not covered -} diff --git a/src/test/ui/pattern/usefulness/doc-hidden-non-exhaustive.stderr b/src/test/ui/pattern/usefulness/doc-hidden-non-exhaustive.stderr deleted file mode 100644 index b450a9aed..000000000 --- a/src/test/ui/pattern/usefulness/doc-hidden-non-exhaustive.stderr +++ /dev/null @@ -1,105 +0,0 @@ -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/doc-hidden-non-exhaustive.rs:15:11 - | -LL | match HiddenEnum::A { - | ^^^^^^^^^^^^^ pattern `_` not covered - | -note: `HiddenEnum` defined here - --> $DIR/auxiliary/hidden.rs:1:1 - | -LL | pub enum HiddenEnum { - | ^^^^^^^^^^^^^^^^^^^ - = note: the matched value is of type `HiddenEnum` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ HiddenEnum::B => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `HiddenEnum::B` not covered - --> $DIR/doc-hidden-non-exhaustive.rs:21:11 - | -LL | match HiddenEnum::A { - | ^^^^^^^^^^^^^ pattern `HiddenEnum::B` not covered - | -note: `HiddenEnum` defined here - --> $DIR/auxiliary/hidden.rs:3:5 - | -LL | pub enum HiddenEnum { - | ------------------- -LL | A, -LL | B, - | ^ not covered - = note: the matched value is of type `HiddenEnum` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ HiddenEnum::C => {} -LL + HiddenEnum::B => todo!() - | - -error[E0004]: non-exhaustive patterns: `HiddenEnum::B` and `_` not covered - --> $DIR/doc-hidden-non-exhaustive.rs:27:11 - | -LL | match HiddenEnum::A { - | ^^^^^^^^^^^^^ patterns `HiddenEnum::B` and `_` not covered - | -note: `HiddenEnum` defined here - --> $DIR/auxiliary/hidden.rs:3:5 - | -LL | pub enum HiddenEnum { - | ------------------- -LL | A, -LL | B, - | ^ not covered - = note: the matched value is of type `HiddenEnum` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ HiddenEnum::A => {} -LL + HiddenEnum::B | _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `Some(HiddenEnum::B)` and `Some(_)` not covered - --> $DIR/doc-hidden-non-exhaustive.rs:32:11 - | -LL | match None { - | ^^^^ patterns `Some(HiddenEnum::B)` and `Some(_)` not covered - | -note: `Option<HiddenEnum>` defined here - --> $SRC_DIR/core/src/option.rs:LL:COL - | -LL | pub enum Option<T> { - | ------------------ -... -LL | Some(#[stable(feature = "rust1", since = "1.0.0")] T), - | ^^^^ not covered - = note: the matched value is of type `Option<HiddenEnum>` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ Some(HiddenEnum::A) => {} -LL + Some(HiddenEnum::B) | Some(_) => todo!() - | - -error[E0004]: non-exhaustive patterns: `InCrate::C` not covered - --> $DIR/doc-hidden-non-exhaustive.rs:38:11 - | -LL | match InCrate::A { - | ^^^^^^^^^^ pattern `InCrate::C` not covered - | -note: `InCrate` defined here - --> $DIR/doc-hidden-non-exhaustive.rs:11:5 - | -LL | enum InCrate { - | ------- -... -LL | C, - | ^ not covered - = note: the matched value is of type `InCrate` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ InCrate::B => {} -LL + InCrate::C => todo!() - | - -error: aborting due to 5 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/empty-match.exhaustive_patterns.stderr b/src/test/ui/pattern/usefulness/empty-match.exhaustive_patterns.stderr deleted file mode 100644 index 5e12bc1d2..000000000 --- a/src/test/ui/pattern/usefulness/empty-match.exhaustive_patterns.stderr +++ /dev/null @@ -1,303 +0,0 @@ -error: unreachable pattern - --> $DIR/empty-match.rs:37:9 - | -LL | _ => {}, - | ^ - | -note: the lint level is defined here - --> $DIR/empty-match.rs:8:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/empty-match.rs:40:9 - | -LL | _ if false => {}, - | ^ - -error: unreachable pattern - --> $DIR/empty-match.rs:47:9 - | -LL | _ => {}, - | ^ - -error: unreachable pattern - --> $DIR/empty-match.rs:50:9 - | -LL | _ if false => {}, - | ^ - -error: unreachable pattern - --> $DIR/empty-match.rs:57:9 - | -LL | _ => {}, - | ^ - -error: unreachable pattern - --> $DIR/empty-match.rs:60:9 - | -LL | _ if false => {}, - | ^ - -error[E0004]: non-exhaustive patterns: type `u8` is non-empty - --> $DIR/empty-match.rs:78:20 - | -LL | match_no_arms!(0u8); - | ^^^ - | - = note: the matched value is of type `u8` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: type `NonEmptyStruct1` is non-empty - --> $DIR/empty-match.rs:79:20 - | -LL | match_no_arms!(NonEmptyStruct1); - | ^^^^^^^^^^^^^^^ - | -note: `NonEmptyStruct1` defined here - --> $DIR/empty-match.rs:14:8 - | -LL | struct NonEmptyStruct1; - | ^^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyStruct1` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: type `NonEmptyStruct2` is non-empty - --> $DIR/empty-match.rs:80:20 - | -LL | match_no_arms!(NonEmptyStruct2(true)); - | ^^^^^^^^^^^^^^^^^^^^^ - | -note: `NonEmptyStruct2` defined here - --> $DIR/empty-match.rs:15:8 - | -LL | struct NonEmptyStruct2(bool); - | ^^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyStruct2` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: type `NonEmptyUnion1` is non-empty - --> $DIR/empty-match.rs:81:20 - | -LL | match_no_arms!((NonEmptyUnion1 { foo: () })); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | -note: `NonEmptyUnion1` defined here - --> $DIR/empty-match.rs:16:7 - | -LL | union NonEmptyUnion1 { - | ^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyUnion1` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: type `NonEmptyUnion2` is non-empty - --> $DIR/empty-match.rs:82:20 - | -LL | match_no_arms!((NonEmptyUnion2 { foo: () })); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | -note: `NonEmptyUnion2` defined here - --> $DIR/empty-match.rs:19:7 - | -LL | union NonEmptyUnion2 { - | ^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyUnion2` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum1::Foo(_)` not covered - --> $DIR/empty-match.rs:83:20 - | -LL | match_no_arms!(NonEmptyEnum1::Foo(true)); - | ^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyEnum1::Foo(_)` not covered - | -note: `NonEmptyEnum1` defined here - --> $DIR/empty-match.rs:24:5 - | -LL | enum NonEmptyEnum1 { - | ------------- -LL | Foo(bool), - | ^^^ not covered - = note: the matched value is of type `NonEmptyEnum1` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - --> $DIR/empty-match.rs:84:20 - | -LL | match_no_arms!(NonEmptyEnum2::Foo(true)); - | ^^^^^^^^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - | -note: `NonEmptyEnum2` defined here - --> $DIR/empty-match.rs:27:5 - | -LL | enum NonEmptyEnum2 { - | ------------- -LL | Foo(bool), - | ^^^ not covered -LL | Bar, - | ^^^ not covered - = note: the matched value is of type `NonEmptyEnum2` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or multiple match arms - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - --> $DIR/empty-match.rs:85:20 - | -LL | match_no_arms!(NonEmptyEnum5::V1); - | ^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - | -note: `NonEmptyEnum5` defined here - --> $DIR/empty-match.rs:30:6 - | -LL | enum NonEmptyEnum5 { - | ^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyEnum5` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or multiple match arms - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/empty-match.rs:87:24 - | -LL | match_guarded_arm!(0u8); - | ^^^ pattern `_` not covered - | - = note: the matched value is of type `u8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyStruct1` not covered - --> $DIR/empty-match.rs:88:24 - | -LL | match_guarded_arm!(NonEmptyStruct1); - | ^^^^^^^^^^^^^^^ pattern `NonEmptyStruct1` not covered - | -note: `NonEmptyStruct1` defined here - --> $DIR/empty-match.rs:14:8 - | -LL | struct NonEmptyStruct1; - | ^^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyStruct1` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyStruct1 => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyStruct2(_)` not covered - --> $DIR/empty-match.rs:89:24 - | -LL | match_guarded_arm!(NonEmptyStruct2(true)); - | ^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyStruct2(_)` not covered - | -note: `NonEmptyStruct2` defined here - --> $DIR/empty-match.rs:15:8 - | -LL | struct NonEmptyStruct2(bool); - | ^^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyStruct2` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyStruct2(_) => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyUnion1 { .. }` not covered - --> $DIR/empty-match.rs:90:24 - | -LL | match_guarded_arm!((NonEmptyUnion1 { foo: () })); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyUnion1 { .. }` not covered - | -note: `NonEmptyUnion1` defined here - --> $DIR/empty-match.rs:16:7 - | -LL | union NonEmptyUnion1 { - | ^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyUnion1` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyUnion1 { .. } => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyUnion2 { .. }` not covered - --> $DIR/empty-match.rs:91:24 - | -LL | match_guarded_arm!((NonEmptyUnion2 { foo: () })); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyUnion2 { .. }` not covered - | -note: `NonEmptyUnion2` defined here - --> $DIR/empty-match.rs:19:7 - | -LL | union NonEmptyUnion2 { - | ^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyUnion2` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyUnion2 { .. } => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum1::Foo(_)` not covered - --> $DIR/empty-match.rs:92:24 - | -LL | match_guarded_arm!(NonEmptyEnum1::Foo(true)); - | ^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyEnum1::Foo(_)` not covered - | -note: `NonEmptyEnum1` defined here - --> $DIR/empty-match.rs:24:5 - | -LL | enum NonEmptyEnum1 { - | ------------- -LL | Foo(bool), - | ^^^ not covered - = note: the matched value is of type `NonEmptyEnum1` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyEnum1::Foo(_) => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - --> $DIR/empty-match.rs:93:24 - | -LL | match_guarded_arm!(NonEmptyEnum2::Foo(true)); - | ^^^^^^^^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - | -note: `NonEmptyEnum2` defined here - --> $DIR/empty-match.rs:27:5 - | -LL | enum NonEmptyEnum2 { - | ------------- -LL | Foo(bool), - | ^^^ not covered -LL | Bar, - | ^^^ not covered - = note: the matched value is of type `NonEmptyEnum2` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ _ if false => {} -LL + NonEmptyEnum2::Foo(_) | NonEmptyEnum2::Bar => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - --> $DIR/empty-match.rs:94:24 - | -LL | match_guarded_arm!(NonEmptyEnum5::V1); - | ^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - | -note: `NonEmptyEnum5` defined here - --> $DIR/empty-match.rs:30:6 - | -LL | enum NonEmptyEnum5 { - | ^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyEnum5` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ _ if false => {} -LL + _ => todo!() - | - -error: aborting due to 22 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/empty-match.normal.stderr b/src/test/ui/pattern/usefulness/empty-match.normal.stderr deleted file mode 100644 index 5e12bc1d2..000000000 --- a/src/test/ui/pattern/usefulness/empty-match.normal.stderr +++ /dev/null @@ -1,303 +0,0 @@ -error: unreachable pattern - --> $DIR/empty-match.rs:37:9 - | -LL | _ => {}, - | ^ - | -note: the lint level is defined here - --> $DIR/empty-match.rs:8:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/empty-match.rs:40:9 - | -LL | _ if false => {}, - | ^ - -error: unreachable pattern - --> $DIR/empty-match.rs:47:9 - | -LL | _ => {}, - | ^ - -error: unreachable pattern - --> $DIR/empty-match.rs:50:9 - | -LL | _ if false => {}, - | ^ - -error: unreachable pattern - --> $DIR/empty-match.rs:57:9 - | -LL | _ => {}, - | ^ - -error: unreachable pattern - --> $DIR/empty-match.rs:60:9 - | -LL | _ if false => {}, - | ^ - -error[E0004]: non-exhaustive patterns: type `u8` is non-empty - --> $DIR/empty-match.rs:78:20 - | -LL | match_no_arms!(0u8); - | ^^^ - | - = note: the matched value is of type `u8` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: type `NonEmptyStruct1` is non-empty - --> $DIR/empty-match.rs:79:20 - | -LL | match_no_arms!(NonEmptyStruct1); - | ^^^^^^^^^^^^^^^ - | -note: `NonEmptyStruct1` defined here - --> $DIR/empty-match.rs:14:8 - | -LL | struct NonEmptyStruct1; - | ^^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyStruct1` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: type `NonEmptyStruct2` is non-empty - --> $DIR/empty-match.rs:80:20 - | -LL | match_no_arms!(NonEmptyStruct2(true)); - | ^^^^^^^^^^^^^^^^^^^^^ - | -note: `NonEmptyStruct2` defined here - --> $DIR/empty-match.rs:15:8 - | -LL | struct NonEmptyStruct2(bool); - | ^^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyStruct2` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: type `NonEmptyUnion1` is non-empty - --> $DIR/empty-match.rs:81:20 - | -LL | match_no_arms!((NonEmptyUnion1 { foo: () })); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | -note: `NonEmptyUnion1` defined here - --> $DIR/empty-match.rs:16:7 - | -LL | union NonEmptyUnion1 { - | ^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyUnion1` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: type `NonEmptyUnion2` is non-empty - --> $DIR/empty-match.rs:82:20 - | -LL | match_no_arms!((NonEmptyUnion2 { foo: () })); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | -note: `NonEmptyUnion2` defined here - --> $DIR/empty-match.rs:19:7 - | -LL | union NonEmptyUnion2 { - | ^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyUnion2` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum1::Foo(_)` not covered - --> $DIR/empty-match.rs:83:20 - | -LL | match_no_arms!(NonEmptyEnum1::Foo(true)); - | ^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyEnum1::Foo(_)` not covered - | -note: `NonEmptyEnum1` defined here - --> $DIR/empty-match.rs:24:5 - | -LL | enum NonEmptyEnum1 { - | ------------- -LL | Foo(bool), - | ^^^ not covered - = note: the matched value is of type `NonEmptyEnum1` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - --> $DIR/empty-match.rs:84:20 - | -LL | match_no_arms!(NonEmptyEnum2::Foo(true)); - | ^^^^^^^^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - | -note: `NonEmptyEnum2` defined here - --> $DIR/empty-match.rs:27:5 - | -LL | enum NonEmptyEnum2 { - | ------------- -LL | Foo(bool), - | ^^^ not covered -LL | Bar, - | ^^^ not covered - = note: the matched value is of type `NonEmptyEnum2` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or multiple match arms - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - --> $DIR/empty-match.rs:85:20 - | -LL | match_no_arms!(NonEmptyEnum5::V1); - | ^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - | -note: `NonEmptyEnum5` defined here - --> $DIR/empty-match.rs:30:6 - | -LL | enum NonEmptyEnum5 { - | ^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyEnum5` - = help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or multiple match arms - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/empty-match.rs:87:24 - | -LL | match_guarded_arm!(0u8); - | ^^^ pattern `_` not covered - | - = note: the matched value is of type `u8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyStruct1` not covered - --> $DIR/empty-match.rs:88:24 - | -LL | match_guarded_arm!(NonEmptyStruct1); - | ^^^^^^^^^^^^^^^ pattern `NonEmptyStruct1` not covered - | -note: `NonEmptyStruct1` defined here - --> $DIR/empty-match.rs:14:8 - | -LL | struct NonEmptyStruct1; - | ^^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyStruct1` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyStruct1 => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyStruct2(_)` not covered - --> $DIR/empty-match.rs:89:24 - | -LL | match_guarded_arm!(NonEmptyStruct2(true)); - | ^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyStruct2(_)` not covered - | -note: `NonEmptyStruct2` defined here - --> $DIR/empty-match.rs:15:8 - | -LL | struct NonEmptyStruct2(bool); - | ^^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyStruct2` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyStruct2(_) => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyUnion1 { .. }` not covered - --> $DIR/empty-match.rs:90:24 - | -LL | match_guarded_arm!((NonEmptyUnion1 { foo: () })); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyUnion1 { .. }` not covered - | -note: `NonEmptyUnion1` defined here - --> $DIR/empty-match.rs:16:7 - | -LL | union NonEmptyUnion1 { - | ^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyUnion1` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyUnion1 { .. } => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyUnion2 { .. }` not covered - --> $DIR/empty-match.rs:91:24 - | -LL | match_guarded_arm!((NonEmptyUnion2 { foo: () })); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyUnion2 { .. }` not covered - | -note: `NonEmptyUnion2` defined here - --> $DIR/empty-match.rs:19:7 - | -LL | union NonEmptyUnion2 { - | ^^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyUnion2` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyUnion2 { .. } => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum1::Foo(_)` not covered - --> $DIR/empty-match.rs:92:24 - | -LL | match_guarded_arm!(NonEmptyEnum1::Foo(true)); - | ^^^^^^^^^^^^^^^^^^^^^^^^ pattern `NonEmptyEnum1::Foo(_)` not covered - | -note: `NonEmptyEnum1` defined here - --> $DIR/empty-match.rs:24:5 - | -LL | enum NonEmptyEnum1 { - | ------------- -LL | Foo(bool), - | ^^^ not covered - = note: the matched value is of type `NonEmptyEnum1` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ _ if false => {} -LL + NonEmptyEnum1::Foo(_) => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - --> $DIR/empty-match.rs:93:24 - | -LL | match_guarded_arm!(NonEmptyEnum2::Foo(true)); - | ^^^^^^^^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - | -note: `NonEmptyEnum2` defined here - --> $DIR/empty-match.rs:27:5 - | -LL | enum NonEmptyEnum2 { - | ------------- -LL | Foo(bool), - | ^^^ not covered -LL | Bar, - | ^^^ not covered - = note: the matched value is of type `NonEmptyEnum2` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ _ if false => {} -LL + NonEmptyEnum2::Foo(_) | NonEmptyEnum2::Bar => todo!() - | - -error[E0004]: non-exhaustive patterns: `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - --> $DIR/empty-match.rs:94:24 - | -LL | match_guarded_arm!(NonEmptyEnum5::V1); - | ^^^^^^^^^^^^^^^^^ patterns `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - | -note: `NonEmptyEnum5` defined here - --> $DIR/empty-match.rs:30:6 - | -LL | enum NonEmptyEnum5 { - | ^^^^^^^^^^^^^ - = note: the matched value is of type `NonEmptyEnum5` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ _ if false => {} -LL + _ => todo!() - | - -error: aborting due to 22 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/empty-match.rs b/src/test/ui/pattern/usefulness/empty-match.rs deleted file mode 100644 index 9cdc0413b..000000000 --- a/src/test/ui/pattern/usefulness/empty-match.rs +++ /dev/null @@ -1,95 +0,0 @@ -// aux-build:empty.rs -// revisions: normal exhaustive_patterns -// -// This tests a match with no arms on various types. -#![feature(never_type)] -#![feature(never_type_fallback)] -#![cfg_attr(exhaustive_patterns, feature(exhaustive_patterns))] -#![deny(unreachable_patterns)] - -extern crate empty; - -enum EmptyEnum {} - -struct NonEmptyStruct1; -struct NonEmptyStruct2(bool); -union NonEmptyUnion1 { - foo: (), -} -union NonEmptyUnion2 { - foo: (), - bar: (), -} -enum NonEmptyEnum1 { - Foo(bool), -} -enum NonEmptyEnum2 { - Foo(bool), - Bar, -} -enum NonEmptyEnum5 { - V1, V2, V3, V4, V5, -} - -fn empty_enum(x: EmptyEnum) { - match x {} // ok - match x { - _ => {}, //~ ERROR unreachable pattern - } - match x { - _ if false => {}, //~ ERROR unreachable pattern - } -} - -fn empty_foreign_enum(x: empty::EmptyForeignEnum) { - match x {} // ok - match x { - _ => {}, //~ ERROR unreachable pattern - } - match x { - _ if false => {}, //~ ERROR unreachable pattern - } -} - -fn never(x: !) { - match x {} // ok - match x { - _ => {}, //~ ERROR unreachable pattern - } - match x { - _ if false => {}, //~ ERROR unreachable pattern - } -} - -macro_rules! match_no_arms { - ($e:expr) => { - match $e {} - }; -} -macro_rules! match_guarded_arm { - ($e:expr) => { - match $e { - _ if false => {} - } - }; -} - -fn main() { - match_no_arms!(0u8); //~ ERROR type `u8` is non-empty - match_no_arms!(NonEmptyStruct1); //~ ERROR type `NonEmptyStruct1` is non-empty - match_no_arms!(NonEmptyStruct2(true)); //~ ERROR type `NonEmptyStruct2` is non-empty - match_no_arms!((NonEmptyUnion1 { foo: () })); //~ ERROR type `NonEmptyUnion1` is non-empty - match_no_arms!((NonEmptyUnion2 { foo: () })); //~ ERROR type `NonEmptyUnion2` is non-empty - match_no_arms!(NonEmptyEnum1::Foo(true)); //~ ERROR `NonEmptyEnum1::Foo(_)` not covered - match_no_arms!(NonEmptyEnum2::Foo(true)); //~ ERROR `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - match_no_arms!(NonEmptyEnum5::V1); //~ ERROR `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered - - match_guarded_arm!(0u8); //~ ERROR `_` not covered - match_guarded_arm!(NonEmptyStruct1); //~ ERROR `NonEmptyStruct1` not covered - match_guarded_arm!(NonEmptyStruct2(true)); //~ ERROR `NonEmptyStruct2(_)` not covered - match_guarded_arm!((NonEmptyUnion1 { foo: () })); //~ ERROR `NonEmptyUnion1 { .. }` not covered - match_guarded_arm!((NonEmptyUnion2 { foo: () })); //~ ERROR `NonEmptyUnion2 { .. }` not covered - match_guarded_arm!(NonEmptyEnum1::Foo(true)); //~ ERROR `NonEmptyEnum1::Foo(_)` not covered - match_guarded_arm!(NonEmptyEnum2::Foo(true)); //~ ERROR `NonEmptyEnum2::Foo(_)` and `NonEmptyEnum2::Bar` not covered - match_guarded_arm!(NonEmptyEnum5::V1); //~ ERROR `NonEmptyEnum5::V1`, `NonEmptyEnum5::V2`, `NonEmptyEnum5::V3` and 2 more not covered -} diff --git a/src/test/ui/pattern/usefulness/floats.rs b/src/test/ui/pattern/usefulness/floats.rs deleted file mode 100644 index 095f5ac9a..000000000 --- a/src/test/ui/pattern/usefulness/floats.rs +++ /dev/null @@ -1,19 +0,0 @@ -#![allow(illegal_floating_point_literal_pattern)] -#![deny(unreachable_patterns)] - -fn main() { - match 0.0 { - 0.0..=1.0 => {} - _ => {} // ok - } - - match 0.0 { //~ ERROR non-exhaustive patterns - 0.0..=1.0 => {} - } - - match 1.0f64 { - 0.01f64 ..= 6.5f64 => {} - 0.02f64 => {} //~ ERROR unreachable pattern - _ => {} - }; -} diff --git a/src/test/ui/pattern/usefulness/floats.stderr b/src/test/ui/pattern/usefulness/floats.stderr deleted file mode 100644 index c926e50b3..000000000 --- a/src/test/ui/pattern/usefulness/floats.stderr +++ /dev/null @@ -1,28 +0,0 @@ -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/floats.rs:10:11 - | -LL | match 0.0 { - | ^^^ pattern `_` not covered - | - = note: the matched value is of type `f64` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ 0.0..=1.0 => {} -LL + _ => todo!() - | - -error: unreachable pattern - --> $DIR/floats.rs:16:7 - | -LL | 0.02f64 => {} - | ^^^^^^^ - | -note: the lint level is defined here - --> $DIR/floats.rs:2:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/guards.rs b/src/test/ui/pattern/usefulness/guards.rs deleted file mode 100644 index b15440cf6..000000000 --- a/src/test/ui/pattern/usefulness/guards.rs +++ /dev/null @@ -1,22 +0,0 @@ -#![feature(exclusive_range_pattern)] -#![deny(unreachable_patterns)] - -enum Q { R(Option<usize>) } - -pub fn main() { - match Q::R(None) { - Q::R(S) if S.is_some() => {} - _ => {} - } - - match 0u8 { //~ ERROR non-exhaustive patterns - 0 .. 128 => {} - 128 ..= 255 if true => {} - } - - match 0u8 { - 0 .. 128 => {} - 128 ..= 255 if false => {} - 128 ..= 255 => {} // ok, because previous arm was guarded - } -} diff --git a/src/test/ui/pattern/usefulness/guards.stderr b/src/test/ui/pattern/usefulness/guards.stderr deleted file mode 100644 index 0c1563c16..000000000 --- a/src/test/ui/pattern/usefulness/guards.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error[E0004]: non-exhaustive patterns: `128_u8..=u8::MAX` not covered - --> $DIR/guards.rs:12:11 - | -LL | match 0u8 { - | ^^^ pattern `128_u8..=u8::MAX` not covered - | - = note: the matched value is of type `u8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ 128 ..= 255 if true => {} -LL + 128_u8..=u8::MAX => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/integer-ranges/exhaustiveness.rs b/src/test/ui/pattern/usefulness/integer-ranges/exhaustiveness.rs deleted file mode 100644 index 0f5f49c4c..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/exhaustiveness.rs +++ /dev/null @@ -1,101 +0,0 @@ -#![feature(exclusive_range_pattern)] -#![allow(overlapping_range_endpoints)] -#![deny(unreachable_patterns)] - -macro_rules! m { - ($s:expr, $($t:tt)+) => { - match $s { $($t)+ => {} } - } -} - -macro_rules! test_int { - ($s:expr, $min:path, $max:path) => { - m!($s, $min..=$max); - m!($s, $min..5 | 5..=$max); - m!($s, $min..=4 | 5..=$max); - m!($s, $min..$max | $max); - m!(($s, true), ($min..5, true) | (5..=$max, true) | ($min..=$max, false)); - } -} - -fn main() { - test_int!(0u8, u8::MIN, u8::MAX); - test_int!(0u16, u16::MIN, u16::MAX); - test_int!(0u32, u32::MIN, u32::MAX); - test_int!(0u64, u64::MIN, u64::MAX); - test_int!(0u128, u128::MIN, u128::MAX); - - test_int!(0i8, i8::MIN, i8::MAX); - test_int!(0i16, i16::MIN, i16::MAX); - test_int!(0i32, i32::MIN, i32::MAX); - test_int!(0i64, i64::MIN, i64::MAX); - test_int!(0i128, i128::MIN, i128::MAX); - - m!('a', '\u{0}'..=char::MAX); - m!('a', '\u{0}'..='\u{10_FFFF}'); - // We can get away with just covering the following two ranges, which correspond to all valid - // Unicode Scalar Values. - m!('a', '\u{0}'..='\u{D7FF}' | '\u{E000}'..=char::MAX); - m!('a', '\u{0}'..'\u{D7FF}' | '\u{D7FF}' | '\u{E000}'..=char::MAX); - - let 0..=255 = 0u8; - let -128..=127 = 0i8; - let -2147483648..=2147483647 = 0i32; - let '\u{0000}'..='\u{10FFFF}' = 'v'; - - // Almost exhaustive - m!(0u8, 0..255); //~ ERROR non-exhaustive patterns - m!(0u8, 0..=254); //~ ERROR non-exhaustive patterns - m!(0u8, 1..=255); //~ ERROR non-exhaustive patterns - m!(0u8, 0..42 | 43..=255); //~ ERROR non-exhaustive patterns - m!(0i8, -128..127); //~ ERROR non-exhaustive patterns - m!(0i8, -128..=126); //~ ERROR non-exhaustive patterns - m!(0i8, -127..=127); //~ ERROR non-exhaustive patterns - match 0i8 { //~ ERROR non-exhaustive patterns - i8::MIN ..= -1 => {} - 1 ..= i8::MAX => {} - } - const ALMOST_MAX: u128 = u128::MAX - 1; - m!(0u128, 0..=ALMOST_MAX); //~ ERROR non-exhaustive patterns - m!(0u128, 0..=4); //~ ERROR non-exhaustive patterns - m!(0u128, 1..=u128::MAX); //~ ERROR non-exhaustive patterns - - // More complicatedly (non-)exhaustive - match 0u8 { - 0 ..= 30 => {} - 20 ..= 70 => {} - 50 ..= 255 => {} - } - match (0u8, true) { //~ ERROR non-exhaustive patterns - (0 ..= 125, false) => {} - (128 ..= 255, false) => {} - (0 ..= 255, true) => {} - } - match (0u8, true) { // ok - (0 ..= 125, false) => {} - (128 ..= 255, false) => {} - (0 ..= 255, true) => {} - (125 .. 128, false) => {} - } - match (true, 0u8) { - (true, 0 ..= 255) => {} - (false, 0 ..= 125) => {} - (false, 128 ..= 255) => {} - (false, 125 .. 128) => {} - } - match Some(0u8) { - None => {} - Some(0 ..= 125) => {} - Some(128 ..= 255) => {} - Some(125 .. 128) => {} - } - const FOO: u8 = 41; - const BAR: &u8 = &42; - match &0u8 { - 0..41 => {} - &FOO => {} - BAR => {} - 43..=255 => {} - } - -} diff --git a/src/test/ui/pattern/usefulness/integer-ranges/exhaustiveness.stderr b/src/test/ui/pattern/usefulness/integer-ranges/exhaustiveness.stderr deleted file mode 100644 index f30ba05df..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/exhaustiveness.stderr +++ /dev/null @@ -1,149 +0,0 @@ -error[E0004]: non-exhaustive patterns: `u8::MAX` not covered - --> $DIR/exhaustiveness.rs:47:8 - | -LL | m!(0u8, 0..255); - | ^^^ pattern `u8::MAX` not covered - | - = note: the matched value is of type `u8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, u8::MAX => todo!() } - | ++++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `u8::MAX` not covered - --> $DIR/exhaustiveness.rs:48:8 - | -LL | m!(0u8, 0..=254); - | ^^^ pattern `u8::MAX` not covered - | - = note: the matched value is of type `u8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, u8::MAX => todo!() } - | ++++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `0_u8` not covered - --> $DIR/exhaustiveness.rs:49:8 - | -LL | m!(0u8, 1..=255); - | ^^^ pattern `0_u8` not covered - | - = note: the matched value is of type `u8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, 0_u8 => todo!() } - | +++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `42_u8` not covered - --> $DIR/exhaustiveness.rs:50:8 - | -LL | m!(0u8, 0..42 | 43..=255); - | ^^^ pattern `42_u8` not covered - | - = note: the matched value is of type `u8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, 42_u8 => todo!() } - | ++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `i8::MAX` not covered - --> $DIR/exhaustiveness.rs:51:8 - | -LL | m!(0i8, -128..127); - | ^^^ pattern `i8::MAX` not covered - | - = note: the matched value is of type `i8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, i8::MAX => todo!() } - | ++++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `i8::MAX` not covered - --> $DIR/exhaustiveness.rs:52:8 - | -LL | m!(0i8, -128..=126); - | ^^^ pattern `i8::MAX` not covered - | - = note: the matched value is of type `i8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, i8::MAX => todo!() } - | ++++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `i8::MIN` not covered - --> $DIR/exhaustiveness.rs:53:8 - | -LL | m!(0i8, -127..=127); - | ^^^ pattern `i8::MIN` not covered - | - = note: the matched value is of type `i8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, i8::MIN => todo!() } - | ++++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `0_i8` not covered - --> $DIR/exhaustiveness.rs:54:11 - | -LL | match 0i8 { - | ^^^ pattern `0_i8` not covered - | - = note: the matched value is of type `i8` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ 1 ..= i8::MAX => {} -LL + 0_i8 => todo!() - | - -error[E0004]: non-exhaustive patterns: `u128::MAX` not covered - --> $DIR/exhaustiveness.rs:59:8 - | -LL | m!(0u128, 0..=ALMOST_MAX); - | ^^^^^ pattern `u128::MAX` not covered - | - = note: the matched value is of type `u128` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, u128::MAX => todo!() } - | ++++++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `5_u128..=u128::MAX` not covered - --> $DIR/exhaustiveness.rs:60:8 - | -LL | m!(0u128, 0..=4); - | ^^^^^ pattern `5_u128..=u128::MAX` not covered - | - = note: the matched value is of type `u128` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, 5_u128..=u128::MAX => todo!() } - | +++++++++++++++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `0_u128` not covered - --> $DIR/exhaustiveness.rs:61:8 - | -LL | m!(0u128, 1..=u128::MAX); - | ^^^^^ pattern `0_u128` not covered - | - = note: the matched value is of type `u128` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, 0_u128 => todo!() } - | +++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `(126_u8..=127_u8, false)` not covered - --> $DIR/exhaustiveness.rs:69:11 - | -LL | match (0u8, true) { - | ^^^^^^^^^^^ pattern `(126_u8..=127_u8, false)` not covered - | - = note: the matched value is of type `(u8, bool)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ (0 ..= 255, true) => {} -LL + (126_u8..=127_u8, false) => todo!() - | - -error: aborting due to 12 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.rs b/src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.rs deleted file mode 100644 index 5ea92b070..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.rs +++ /dev/null @@ -1,59 +0,0 @@ -#![feature(exclusive_range_pattern)] -#![deny(overlapping_range_endpoints)] - -macro_rules! m { - ($s:expr, $t1:pat, $t2:pat) => { - match $s { - $t1 => {} - $t2 => {} - _ => {} - } - } -} - -fn main() { - m!(0u8, 20..=30, 30..=40); //~ ERROR multiple patterns overlap on their endpoints - m!(0u8, 30..=40, 20..=30); //~ ERROR multiple patterns overlap on their endpoints - m!(0u8, 20..=30, 31..=40); - m!(0u8, 20..=30, 29..=40); - m!(0u8, 20.. 30, 29..=40); //~ ERROR multiple patterns overlap on their endpoints - m!(0u8, 20.. 30, 28..=40); - m!(0u8, 20.. 30, 30..=40); - m!(0u8, 20..=30, 30..=30); - m!(0u8, 20..=30, 30..=31); //~ ERROR multiple patterns overlap on their endpoints - m!(0u8, 20..=30, 29..=30); - m!(0u8, 20..=30, 20..=20); - m!(0u8, 20..=30, 20..=21); - m!(0u8, 20..=30, 19..=20); //~ ERROR multiple patterns overlap on their endpoints - m!(0u8, 20..=30, 20); - m!(0u8, 20..=30, 25); - m!(0u8, 20..=30, 30); - m!(0u8, 20.. 30, 29); - m!(0u8, 20, 20..=30); - m!(0u8, 25, 20..=30); - m!(0u8, 30, 20..=30); - - match 0u8 { - 0..=10 => {} - 20..=30 => {} - 10..=20 => {} //~ ERROR multiple patterns overlap on their endpoints - _ => {} - } - match (0u8, true) { - (0..=10, true) => {} - (10..20, true) => {} // not detected - (10..20, false) => {} - _ => {} - } - match (true, 0u8) { - (true, 0..=10) => {} - (true, 10..20) => {} //~ ERROR multiple patterns overlap on their endpoints - (false, 10..20) => {} - _ => {} - } - match Some(0u8) { - Some(0..=10) => {} - Some(10..20) => {} //~ ERROR multiple patterns overlap on their endpoints - _ => {} - } -} diff --git a/src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.stderr b/src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.stderr deleted file mode 100644 index ea0e8f6e4..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/overlapping_range_endpoints.stderr +++ /dev/null @@ -1,89 +0,0 @@ -error: multiple patterns overlap on their endpoints - --> $DIR/overlapping_range_endpoints.rs:15:22 - | -LL | m!(0u8, 20..=30, 30..=40); - | ------- ^^^^^^^ ... with this range - | | - | this range overlaps on `30_u8`... - | - = note: you likely meant to write mutually exclusive ranges -note: the lint level is defined here - --> $DIR/overlapping_range_endpoints.rs:2:9 - | -LL | #![deny(overlapping_range_endpoints)] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: multiple patterns overlap on their endpoints - --> $DIR/overlapping_range_endpoints.rs:16:22 - | -LL | m!(0u8, 30..=40, 20..=30); - | ------- ^^^^^^^ ... with this range - | | - | this range overlaps on `30_u8`... - | - = note: you likely meant to write mutually exclusive ranges - -error: multiple patterns overlap on their endpoints - --> $DIR/overlapping_range_endpoints.rs:19:22 - | -LL | m!(0u8, 20.. 30, 29..=40); - | ------- ^^^^^^^ ... with this range - | | - | this range overlaps on `29_u8`... - | - = note: you likely meant to write mutually exclusive ranges - -error: multiple patterns overlap on their endpoints - --> $DIR/overlapping_range_endpoints.rs:23:22 - | -LL | m!(0u8, 20..=30, 30..=31); - | ------- ^^^^^^^ ... with this range - | | - | this range overlaps on `30_u8`... - | - = note: you likely meant to write mutually exclusive ranges - -error: multiple patterns overlap on their endpoints - --> $DIR/overlapping_range_endpoints.rs:27:22 - | -LL | m!(0u8, 20..=30, 19..=20); - | ------- ^^^^^^^ ... with this range - | | - | this range overlaps on `20_u8`... - | - = note: you likely meant to write mutually exclusive ranges - -error: multiple patterns overlap on their endpoints - --> $DIR/overlapping_range_endpoints.rs:39:9 - | -LL | 0..=10 => {} - | ------ this range overlaps on `10_u8`... -LL | 20..=30 => {} - | ------- this range overlaps on `20_u8`... -LL | 10..=20 => {} - | ^^^^^^^ ... with this range - | - = note: you likely meant to write mutually exclusive ranges - -error: multiple patterns overlap on their endpoints - --> $DIR/overlapping_range_endpoints.rs:50:16 - | -LL | (true, 0..=10) => {} - | ------ this range overlaps on `10_u8`... -LL | (true, 10..20) => {} - | ^^^^^^ ... with this range - | - = note: you likely meant to write mutually exclusive ranges - -error: multiple patterns overlap on their endpoints - --> $DIR/overlapping_range_endpoints.rs:56:14 - | -LL | Some(0..=10) => {} - | ------ this range overlaps on `10_u8`... -LL | Some(10..20) => {} - | ^^^^^^ ... with this range - | - = note: you likely meant to write mutually exclusive ranges - -error: aborting due to 8 previous errors - diff --git a/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.allow.stderr b/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.allow.stderr deleted file mode 100644 index 9f277fa1e..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.allow.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error[E0004]: non-exhaustive patterns: type `usize` is non-empty - --> $DIR/pointer-sized-int.rs:48:11 - | -LL | match 7usize {} - | ^^^^^^ - | - = note: the matched value is of type `usize` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown - | -LL ~ match 7usize { -LL + _ => todo!(), -LL + } - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.deny.stderr b/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.deny.stderr deleted file mode 100644 index e3eb98ccd..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.deny.stderr +++ /dev/null @@ -1,170 +0,0 @@ -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:12:11 - | -LL | match 0usize { - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `usize` - = note: `usize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `usize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ 0 ..= usize::MAX => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:17:11 - | -LL | match 0isize { - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `isize` - = note: `isize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `isize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ isize::MIN ..= isize::MAX => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:22:8 - | -LL | m!(0usize, 0..=usize::MAX); - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `usize` - = note: `usize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `usize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, _ => todo!() } - | ++++++++++++++ - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:24:8 - | -LL | m!(0usize, 0..5 | 5..=usize::MAX); - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `usize` - = note: `usize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `usize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, _ => todo!() } - | ++++++++++++++ - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:26:8 - | -LL | m!(0usize, 0..usize::MAX | usize::MAX); - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `usize` - = note: `usize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `usize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, _ => todo!() } - | ++++++++++++++ - -error[E0004]: non-exhaustive patterns: `(_, _)` not covered - --> $DIR/pointer-sized-int.rs:28:8 - | -LL | m!((0usize, true), (0..5, true) | (5..=usize::MAX, true) | (0..=usize::MAX, false)); - | ^^^^^^^^^^^^^^ pattern `(_, _)` not covered - | - = note: the matched value is of type `(usize, bool)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, (_, _) => todo!() } - | +++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:31:8 - | -LL | m!(0isize, isize::MIN..=isize::MAX); - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `isize` - = note: `isize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `isize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, _ => todo!() } - | ++++++++++++++ - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:33:8 - | -LL | m!(0isize, isize::MIN..5 | 5..=isize::MAX); - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `isize` - = note: `isize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `isize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, _ => todo!() } - | ++++++++++++++ - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:35:8 - | -LL | m!(0isize, isize::MIN..isize::MAX | isize::MAX); - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `isize` - = note: `isize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `isize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, _ => todo!() } - | ++++++++++++++ - -error[E0004]: non-exhaustive patterns: `(_, _)` not covered - --> $DIR/pointer-sized-int.rs:37:8 - | -LL | m!((0isize, true), (isize::MIN..5, true) - | ^^^^^^^^^^^^^^ pattern `(_, _)` not covered - | - = note: the matched value is of type `(isize, bool)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match $s { $($t)+ => {}, (_, _) => todo!() } - | +++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/pointer-sized-int.rs:41:11 - | -LL | match 0isize { - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `isize` - = note: `isize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `isize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ 1 ..= isize::MAX => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: type `usize` is non-empty - --> $DIR/pointer-sized-int.rs:48:11 - | -LL | match 7usize {} - | ^^^^^^ - | - = note: the matched value is of type `usize` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown - | -LL ~ match 7usize { -LL + _ => todo!(), -LL + } - | - -error: aborting due to 12 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.rs b/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.rs deleted file mode 100644 index 1ed18c267..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/pointer-sized-int.rs +++ /dev/null @@ -1,50 +0,0 @@ -// revisions: allow deny -#![feature(exclusive_range_pattern)] -#![cfg_attr(allow, feature(precise_pointer_size_matching))] - -macro_rules! m { - ($s:expr, $($t:tt)+) => { - match $s { $($t)+ => {} } - } -} - -fn main() { - match 0usize { - //[deny]~^ ERROR non-exhaustive patterns - 0 ..= usize::MAX => {} - } - - match 0isize { - //[deny]~^ ERROR non-exhaustive patterns - isize::MIN ..= isize::MAX => {} - } - - m!(0usize, 0..=usize::MAX); - //[deny]~^ ERROR non-exhaustive patterns - m!(0usize, 0..5 | 5..=usize::MAX); - //[deny]~^ ERROR non-exhaustive patterns - m!(0usize, 0..usize::MAX | usize::MAX); - //[deny]~^ ERROR non-exhaustive patterns - m!((0usize, true), (0..5, true) | (5..=usize::MAX, true) | (0..=usize::MAX, false)); - //[deny]~^ ERROR non-exhaustive patterns - - m!(0isize, isize::MIN..=isize::MAX); - //[deny]~^ ERROR non-exhaustive patterns - m!(0isize, isize::MIN..5 | 5..=isize::MAX); - //[deny]~^ ERROR non-exhaustive patterns - m!(0isize, isize::MIN..isize::MAX | isize::MAX); - //[deny]~^ ERROR non-exhaustive patterns - m!((0isize, true), (isize::MIN..5, true) - | (5..=isize::MAX, true) | (isize::MIN..=isize::MAX, false)); - //[deny]~^^ ERROR non-exhaustive patterns - - match 0isize { - //[deny]~^ ERROR non-exhaustive patterns - isize::MIN ..= -1 => {} - 0 => {} - 1 ..= isize::MAX => {} - } - - match 7usize {} - //~^ ERROR non-exhaustive patterns -} diff --git a/src/test/ui/pattern/usefulness/integer-ranges/precise_pointer_matching-message.rs b/src/test/ui/pattern/usefulness/integer-ranges/precise_pointer_matching-message.rs deleted file mode 100644 index a2aa655ca..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/precise_pointer_matching-message.rs +++ /dev/null @@ -1,18 +0,0 @@ -// This tests that the lint message explains the reason for the error. -fn main() { - match 0usize { - //~^ ERROR non-exhaustive patterns: `_` not covered - //~| NOTE pattern `_` not covered - //~| NOTE the matched value is of type `usize` - //~| NOTE `usize` does not have a fixed maximum value - 0..=usize::MAX => {} - } - - match 0isize { - //~^ ERROR non-exhaustive patterns: `_` not covered - //~| NOTE pattern `_` not covered - //~| NOTE the matched value is of type `isize` - //~| NOTE `isize` does not have a fixed maximum value - isize::MIN..=isize::MAX => {} - } -} diff --git a/src/test/ui/pattern/usefulness/integer-ranges/precise_pointer_matching-message.stderr b/src/test/ui/pattern/usefulness/integer-ranges/precise_pointer_matching-message.stderr deleted file mode 100644 index 30492c982..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/precise_pointer_matching-message.stderr +++ /dev/null @@ -1,33 +0,0 @@ -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/precise_pointer_matching-message.rs:3:11 - | -LL | match 0usize { - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `usize` - = note: `usize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `usize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ 0..=usize::MAX => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/precise_pointer_matching-message.rs:11:11 - | -LL | match 0isize { - | ^^^^^^ pattern `_` not covered - | - = note: the matched value is of type `isize` - = note: `isize` does not have a fixed maximum value, so a wildcard `_` is necessary to match exhaustively - = help: add `#![feature(precise_pointer_size_matching)]` to the crate attributes to enable precise `isize` matching -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ isize::MIN..=isize::MAX => {} -LL + _ => todo!() - | - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/integer-ranges/reachability.rs b/src/test/ui/pattern/usefulness/integer-ranges/reachability.rs deleted file mode 100644 index fb4d59b05..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/reachability.rs +++ /dev/null @@ -1,113 +0,0 @@ -#![feature(exclusive_range_pattern)] -#![allow(overlapping_range_endpoints)] -#![deny(unreachable_patterns)] - -macro_rules! m { - ($s:expr, $t1:pat, $t2:pat) => { - match $s { - $t1 => {} - $t2 => {} - _ => {} - } - } -} - -fn main() { - m!(0u8, 42, 41); - m!(0u8, 42, 42); //~ ERROR unreachable pattern - m!(0u8, 42, 43); - - m!(0u8, 20..=30, 19); - m!(0u8, 20..=30, 20); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 21); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 25); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 29); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 30); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 31); - m!(0u8, 20..30, 19); - m!(0u8, 20..30, 20); //~ ERROR unreachable pattern - m!(0u8, 20..30, 21); //~ ERROR unreachable pattern - m!(0u8, 20..30, 25); //~ ERROR unreachable pattern - m!(0u8, 20..30, 29); //~ ERROR unreachable pattern - m!(0u8, 20..30, 30); - m!(0u8, 20..30, 31); - - m!(0u8, 20..=30, 20..=30); //~ ERROR unreachable pattern - m!(0u8, 20.. 30, 20.. 30); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 20.. 30); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 19..=30); - m!(0u8, 20..=30, 21..=30); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 20..=29); //~ ERROR unreachable pattern - m!(0u8, 20..=30, 20..=31); - m!('a', 'A'..='z', 'a'..='z'); //~ ERROR unreachable pattern - - match 0u8 { - 5 => {}, - 6 => {}, - 7 => {}, - 8 => {}, - 5..=8 => {}, //~ ERROR unreachable pattern - _ => {}, - } - match 0u8 { - 0..10 => {}, - 10..20 => {}, - 5..15 => {}, //~ ERROR unreachable pattern - _ => {}, - } - match 0u8 { - 0..10 => {}, - 10..20 => {}, - 20..30 => {}, - 5..25 => {}, //~ ERROR unreachable pattern - _ => {}, - } - match 0u8 { - 0..10 => {}, - 10 => {}, - 11..=23 => {}, - 19..30 => {}, - 5..25 => {}, //~ ERROR unreachable pattern - _ => {}, - } - match 0usize { - 0..10 => {}, - 10..20 => {}, - 5..15 => {}, //~ ERROR unreachable pattern - _ => {}, - } - // Chars between '\u{D7FF}' and '\u{E000}' are invalid even though ranges that contain them are - // allowed. - match 'a' { - _ => {}, - '\u{D7FF}'..='\u{E000}' => {}, //~ ERROR unreachable pattern - } - match 'a' { - '\u{0}'..='\u{D7FF}' => {}, - '\u{E000}'..='\u{10_FFFF}' => {}, - '\u{D7FF}'..='\u{E000}' => {}, // FIXME should be unreachable - } - - match (0u8, true) { - (0..=255, false) => {} - (0..=255, true) => {} // ok - } - match (true, 0u8) { - (false, 0..=255) => {} - (true, 0..=255) => {} // ok - } - - const FOO: i32 = 42; - const BAR: &i32 = &42; - match &0 { - &42 => {} - &FOO => {} //~ ERROR unreachable pattern - BAR => {} //~ ERROR unreachable pattern - _ => {} - } - // Regression test, see https://github.com/rust-lang/rust/pull/66326#issuecomment-552889933 - match &0 { - BAR => {} // ok - _ => {} - } -} diff --git a/src/test/ui/pattern/usefulness/integer-ranges/reachability.stderr b/src/test/ui/pattern/usefulness/integer-ranges/reachability.stderr deleted file mode 100644 index 0ffb0ffd8..000000000 --- a/src/test/ui/pattern/usefulness/integer-ranges/reachability.stderr +++ /dev/null @@ -1,154 +0,0 @@ -error: unreachable pattern - --> $DIR/reachability.rs:17:17 - | -LL | m!(0u8, 42, 42); - | ^^ - | -note: the lint level is defined here - --> $DIR/reachability.rs:3:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:21:22 - | -LL | m!(0u8, 20..=30, 20); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:22:22 - | -LL | m!(0u8, 20..=30, 21); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:23:22 - | -LL | m!(0u8, 20..=30, 25); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:24:22 - | -LL | m!(0u8, 20..=30, 29); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:25:22 - | -LL | m!(0u8, 20..=30, 30); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:28:21 - | -LL | m!(0u8, 20..30, 20); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:29:21 - | -LL | m!(0u8, 20..30, 21); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:30:21 - | -LL | m!(0u8, 20..30, 25); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:31:21 - | -LL | m!(0u8, 20..30, 29); - | ^^ - -error: unreachable pattern - --> $DIR/reachability.rs:35:22 - | -LL | m!(0u8, 20..=30, 20..=30); - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:36:22 - | -LL | m!(0u8, 20.. 30, 20.. 30); - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:37:22 - | -LL | m!(0u8, 20..=30, 20.. 30); - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:39:22 - | -LL | m!(0u8, 20..=30, 21..=30); - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:40:22 - | -LL | m!(0u8, 20..=30, 20..=29); - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:42:24 - | -LL | m!('a', 'A'..='z', 'a'..='z'); - | ^^^^^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:49:9 - | -LL | 5..=8 => {}, - | ^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:55:9 - | -LL | 5..15 => {}, - | ^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:62:9 - | -LL | 5..25 => {}, - | ^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:70:9 - | -LL | 5..25 => {}, - | ^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:76:9 - | -LL | 5..15 => {}, - | ^^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:83:9 - | -LL | _ => {}, - | - matches any value -LL | '\u{D7FF}'..='\u{E000}' => {}, - | ^^^^^^^^^^^^^^^^^^^^^^^ unreachable pattern - -error: unreachable pattern - --> $DIR/reachability.rs:104:9 - | -LL | &FOO => {} - | ^^^^ - -error: unreachable pattern - --> $DIR/reachability.rs:105:9 - | -LL | BAR => {} - | ^^^ - -error: aborting due to 24 previous errors - diff --git a/src/test/ui/pattern/usefulness/irrefutable-let-patterns.rs b/src/test/ui/pattern/usefulness/irrefutable-let-patterns.rs deleted file mode 100644 index d400ef0bb..000000000 --- a/src/test/ui/pattern/usefulness/irrefutable-let-patterns.rs +++ /dev/null @@ -1,11 +0,0 @@ -// run-pass - -#![allow(irrefutable_let_patterns)] - -fn main() { - if let _ = 5 {} - - while let _ = 5 { - break; - } -} diff --git a/src/test/ui/pattern/usefulness/irrefutable-unit.rs b/src/test/ui/pattern/usefulness/irrefutable-unit.rs deleted file mode 100644 index dd8f03b6d..000000000 --- a/src/test/ui/pattern/usefulness/irrefutable-unit.rs +++ /dev/null @@ -1,6 +0,0 @@ -// run-pass -// pretty-expanded FIXME #23616 - -pub fn main() { - let ((),()) = ((),()); -} diff --git a/src/test/ui/pattern/usefulness/issue-12116.rs b/src/test/ui/pattern/usefulness/issue-12116.rs deleted file mode 100644 index 3cb92a540..000000000 --- a/src/test/ui/pattern/usefulness/issue-12116.rs +++ /dev/null @@ -1,21 +0,0 @@ -#![feature(box_patterns)] -#![allow(dead_code)] -#![allow(unused_variables)] -#![deny(unreachable_patterns)] - - -enum IntList { - Cons(isize, Box<IntList>), - Nil -} - -fn tail(source_list: &IntList) -> IntList { - match source_list { - &IntList::Cons(val, box ref next_list) => tail(next_list), - &IntList::Cons(val, box IntList::Nil) => IntList::Cons(val, Box::new(IntList::Nil)), - //~^ ERROR unreachable pattern - _ => panic!(), - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/issue-12116.stderr b/src/test/ui/pattern/usefulness/issue-12116.stderr deleted file mode 100644 index 7f15c4703..000000000 --- a/src/test/ui/pattern/usefulness/issue-12116.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: unreachable pattern - --> $DIR/issue-12116.rs:15:9 - | -LL | &IntList::Cons(val, box IntList::Nil) => IntList::Cons(val, Box::new(IntList::Nil)), - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/issue-12116.rs:4:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/usefulness/issue-12369.rs b/src/test/ui/pattern/usefulness/issue-12369.rs deleted file mode 100644 index 0481c1fd9..000000000 --- a/src/test/ui/pattern/usefulness/issue-12369.rs +++ /dev/null @@ -1,11 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - let sl = vec![1,2,3]; - let v: isize = match &*sl { - &[] => 0, - &[a,b,c] => 3, - &[a, ref rest @ ..] => a, - &[10,a, ref rest @ ..] => 10 //~ ERROR: unreachable pattern - }; -} diff --git a/src/test/ui/pattern/usefulness/issue-12369.stderr b/src/test/ui/pattern/usefulness/issue-12369.stderr deleted file mode 100644 index aab2be78c..000000000 --- a/src/test/ui/pattern/usefulness/issue-12369.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: unreachable pattern - --> $DIR/issue-12369.rs:9:9 - | -LL | &[10,a, ref rest @ ..] => 10 - | ^^^^^^^^^^^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/issue-12369.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/usefulness/issue-13727.rs b/src/test/ui/pattern/usefulness/issue-13727.rs deleted file mode 100644 index 7fb565ef3..000000000 --- a/src/test/ui/pattern/usefulness/issue-13727.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![allow(overflowing_literals)] -#![deny(unreachable_patterns)] - -fn test(val: u8) { - match val { - 256 => print!("0b1110\n"), - 512 => print!("0b1111\n"), - //~^ ERROR: unreachable pattern - _ => print!("fail\n"), - } -} - -fn main() { - test(1); -} diff --git a/src/test/ui/pattern/usefulness/issue-13727.stderr b/src/test/ui/pattern/usefulness/issue-13727.stderr deleted file mode 100644 index 07ca56a56..000000000 --- a/src/test/ui/pattern/usefulness/issue-13727.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: unreachable pattern - --> $DIR/issue-13727.rs:7:5 - | -LL | 512 => print!("0b1111\n"), - | ^^^ - | -note: the lint level is defined here - --> $DIR/issue-13727.rs:2:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/usefulness/issue-15129.rs b/src/test/ui/pattern/usefulness/issue-15129.rs deleted file mode 100644 index f02e5c0c6..000000000 --- a/src/test/ui/pattern/usefulness/issue-15129.rs +++ /dev/null @@ -1,17 +0,0 @@ -pub enum T { - T1(()), - T2(()), -} - -pub enum V { - V1(isize), - V2(bool), -} - -fn main() { - match (T::T1(()), V::V2(true)) { - //~^ ERROR non-exhaustive patterns: `(T::T1(()), V::V2(_))` and `(T::T2(()), V::V1(_))` not covered - (T::T1(()), V::V1(i)) => (), - (T::T2(()), V::V2(b)) => (), - } -} diff --git a/src/test/ui/pattern/usefulness/issue-15129.stderr b/src/test/ui/pattern/usefulness/issue-15129.stderr deleted file mode 100644 index ee8410b76..000000000 --- a/src/test/ui/pattern/usefulness/issue-15129.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error[E0004]: non-exhaustive patterns: `(T::T1(()), V::V2(_))` and `(T::T2(()), V::V1(_))` not covered - --> $DIR/issue-15129.rs:12:11 - | -LL | match (T::T1(()), V::V2(true)) { - | ^^^^^^^^^^^^^^^^^^^^^^^^ patterns `(T::T1(()), V::V2(_))` and `(T::T2(()), V::V1(_))` not covered - | - = note: the matched value is of type `(T, V)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ (T::T2(()), V::V2(b)) => (), -LL ~ (T::T1(()), V::V2(_)) | (T::T2(()), V::V1(_)) => todo!(), - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-2111.rs b/src/test/ui/pattern/usefulness/issue-2111.rs deleted file mode 100644 index d27beaeff..000000000 --- a/src/test/ui/pattern/usefulness/issue-2111.rs +++ /dev/null @@ -1,11 +0,0 @@ -fn foo(a: Option<usize>, b: Option<usize>) { - match (a, b) { - //~^ ERROR: non-exhaustive patterns: `(None, None)` and `(Some(_), Some(_))` not covered - (Some(a), Some(b)) if a == b => {} - (Some(_), None) | (None, Some(_)) => {} - } -} - -fn main() { - foo(None, None); -} diff --git a/src/test/ui/pattern/usefulness/issue-2111.stderr b/src/test/ui/pattern/usefulness/issue-2111.stderr deleted file mode 100644 index 01890b73c..000000000 --- a/src/test/ui/pattern/usefulness/issue-2111.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error[E0004]: non-exhaustive patterns: `(None, None)` and `(Some(_), Some(_))` not covered - --> $DIR/issue-2111.rs:2:11 - | -LL | match (a, b) { - | ^^^^^^ patterns `(None, None)` and `(Some(_), Some(_))` not covered - | - = note: the matched value is of type `(Option<usize>, Option<usize>)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ (Some(_), None) | (None, Some(_)) => {} -LL + (None, None) | (Some(_), Some(_)) => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-30240-b.rs b/src/test/ui/pattern/usefulness/issue-30240-b.rs deleted file mode 100644 index 01a6e7d8c..000000000 --- a/src/test/ui/pattern/usefulness/issue-30240-b.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - match "world" { - "hello" => {} - _ => {}, - } - - match "world" { - ref _x if false => {} - "hello" => {} - "hello" => {} //~ ERROR unreachable pattern - _ => {}, - } -} diff --git a/src/test/ui/pattern/usefulness/issue-30240-b.stderr b/src/test/ui/pattern/usefulness/issue-30240-b.stderr deleted file mode 100644 index 59d64bc25..000000000 --- a/src/test/ui/pattern/usefulness/issue-30240-b.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: unreachable pattern - --> $DIR/issue-30240-b.rs:12:9 - | -LL | "hello" => {} - | ^^^^^^^ - | -note: the lint level is defined here - --> $DIR/issue-30240-b.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/usefulness/issue-30240-rpass.rs b/src/test/ui/pattern/usefulness/issue-30240-rpass.rs deleted file mode 100644 index ab16614fd..000000000 --- a/src/test/ui/pattern/usefulness/issue-30240-rpass.rs +++ /dev/null @@ -1,14 +0,0 @@ -// run-pass -fn main() { - let &ref a = &[0i32] as &[_]; - assert_eq!(a, &[0i32] as &[_]); - - let &ref a = "hello"; - assert_eq!(a, "hello"); - - match "foo" { - "fool" => unreachable!(), - "foo" => {}, - ref _x => unreachable!() - } -} diff --git a/src/test/ui/pattern/usefulness/issue-30240.rs b/src/test/ui/pattern/usefulness/issue-30240.rs deleted file mode 100644 index a0c0d1626..000000000 --- a/src/test/ui/pattern/usefulness/issue-30240.rs +++ /dev/null @@ -1,10 +0,0 @@ -fn main() { - match "world" { //~ ERROR non-exhaustive patterns: `&_` - "hello" => {} - } - - match "world" { //~ ERROR non-exhaustive patterns: `&_` - ref _x if false => {} - "hello" => {} - } -} diff --git a/src/test/ui/pattern/usefulness/issue-30240.stderr b/src/test/ui/pattern/usefulness/issue-30240.stderr deleted file mode 100644 index 759fdeafe..000000000 --- a/src/test/ui/pattern/usefulness/issue-30240.stderr +++ /dev/null @@ -1,29 +0,0 @@ -error[E0004]: non-exhaustive patterns: `&_` not covered - --> $DIR/issue-30240.rs:2:11 - | -LL | match "world" { - | ^^^^^^^ pattern `&_` not covered - | - = note: the matched value is of type `&str` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ "hello" => {} -LL + &_ => todo!() - | - -error[E0004]: non-exhaustive patterns: `&_` not covered - --> $DIR/issue-30240.rs:6:11 - | -LL | match "world" { - | ^^^^^^^ pattern `&_` not covered - | - = note: the matched value is of type `&str` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ "hello" => {} -LL + &_ => todo!() - | - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-3096-1.rs b/src/test/ui/pattern/usefulness/issue-3096-1.rs deleted file mode 100644 index edc3b3223..000000000 --- a/src/test/ui/pattern/usefulness/issue-3096-1.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - match () { } //~ ERROR non-exhaustive -} diff --git a/src/test/ui/pattern/usefulness/issue-3096-1.stderr b/src/test/ui/pattern/usefulness/issue-3096-1.stderr deleted file mode 100644 index d8884394f..000000000 --- a/src/test/ui/pattern/usefulness/issue-3096-1.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error[E0004]: non-exhaustive patterns: type `()` is non-empty - --> $DIR/issue-3096-1.rs:2:11 - | -LL | match () { } - | ^^ - | - = note: the matched value is of type `()` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown - | -LL ~ match () { -LL + _ => todo!(), -LL ~ } - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-3096-2.rs b/src/test/ui/pattern/usefulness/issue-3096-2.rs deleted file mode 100644 index a26e42580..000000000 --- a/src/test/ui/pattern/usefulness/issue-3096-2.rs +++ /dev/null @@ -1,6 +0,0 @@ -enum Bottom { } - -fn main() { - let x = &() as *const () as *const Bottom; - match x { } //~ ERROR non-exhaustive patterns -} diff --git a/src/test/ui/pattern/usefulness/issue-3096-2.stderr b/src/test/ui/pattern/usefulness/issue-3096-2.stderr deleted file mode 100644 index 2df8911ba..000000000 --- a/src/test/ui/pattern/usefulness/issue-3096-2.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error[E0004]: non-exhaustive patterns: type `*const Bottom` is non-empty - --> $DIR/issue-3096-2.rs:5:11 - | -LL | match x { } - | ^ - | - = note: the matched value is of type `*const Bottom` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown - | -LL ~ match x { -LL + _ => todo!(), -LL ~ } - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-31221.rs b/src/test/ui/pattern/usefulness/issue-31221.rs deleted file mode 100644 index e03f1ec5b..000000000 --- a/src/test/ui/pattern/usefulness/issue-31221.rs +++ /dev/null @@ -1,34 +0,0 @@ -#![allow(dead_code)] -#![allow(unused_variables)] -#![allow(non_snake_case)] -#![deny(unreachable_patterns)] - -#[derive(Clone, Copy)] -enum Enum { - Var1, - Var2, -} - -fn main() { - use Enum::*; - let s = Var1; - match s { - Var1 => (), - Var3 => (), - Var2 => (), - //~^ ERROR unreachable pattern - }; - match &s { - &Var1 => (), - &Var3 => (), - &Var2 => (), - //~^ ERROR unreachable pattern - }; - let t = (Var1, Var1); - match t { - (Var1, b) => (), - (c, d) => (), - anything => () - //~^ ERROR unreachable pattern - }; -} diff --git a/src/test/ui/pattern/usefulness/issue-31221.stderr b/src/test/ui/pattern/usefulness/issue-31221.stderr deleted file mode 100644 index 7d3491444..000000000 --- a/src/test/ui/pattern/usefulness/issue-31221.stderr +++ /dev/null @@ -1,32 +0,0 @@ -error: unreachable pattern - --> $DIR/issue-31221.rs:18:9 - | -LL | Var3 => (), - | ---- matches any value -LL | Var2 => (), - | ^^^^ unreachable pattern - | -note: the lint level is defined here - --> $DIR/issue-31221.rs:4:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/issue-31221.rs:24:9 - | -LL | &Var3 => (), - | ----- matches any value -LL | &Var2 => (), - | ^^^^^ unreachable pattern - -error: unreachable pattern - --> $DIR/issue-31221.rs:31:9 - | -LL | (c, d) => (), - | ------ matches any value -LL | anything => () - | ^^^^^^^^ unreachable pattern - -error: aborting due to 3 previous errors - diff --git a/src/test/ui/pattern/usefulness/issue-31561.rs b/src/test/ui/pattern/usefulness/issue-31561.rs deleted file mode 100644 index 5b878851a..000000000 --- a/src/test/ui/pattern/usefulness/issue-31561.rs +++ /dev/null @@ -1,10 +0,0 @@ -enum Thing { - Foo(u8), - Bar, - Baz -} - -fn main() { - let Thing::Foo(y) = Thing::Foo(1); - //~^ ERROR refutable pattern in local binding: `Thing::Bar` and `Thing::Baz` not covered -} diff --git a/src/test/ui/pattern/usefulness/issue-31561.stderr b/src/test/ui/pattern/usefulness/issue-31561.stderr deleted file mode 100644 index 20f2f0950..000000000 --- a/src/test/ui/pattern/usefulness/issue-31561.stderr +++ /dev/null @@ -1,31 +0,0 @@ -error[E0005]: refutable pattern in local binding: `Thing::Bar` and `Thing::Baz` not covered - --> $DIR/issue-31561.rs:8:9 - | -LL | let Thing::Foo(y) = Thing::Foo(1); - | ^^^^^^^^^^^^^ patterns `Thing::Bar` and `Thing::Baz` not covered - | - = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant - = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html -note: `Thing` defined here - --> $DIR/issue-31561.rs:3:5 - | -LL | enum Thing { - | ----- -LL | Foo(u8), -LL | Bar, - | ^^^ not covered -LL | Baz - | ^^^ not covered - = note: the matched value is of type `Thing` -help: you might want to use `if let` to ignore the variants that aren't matched - | -LL | let y = if let Thing::Foo(y) = Thing::Foo(1) { y } else { todo!() }; - | ++++++++++ ++++++++++++++++++++++ -help: alternatively, you might want to use let else to handle the variants that aren't matched - | -LL | let Thing::Foo(y) = Thing::Foo(1) else { todo!() }; - | ++++++++++++++++ - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0005`. diff --git a/src/test/ui/pattern/usefulness/issue-35609.rs b/src/test/ui/pattern/usefulness/issue-35609.rs deleted file mode 100644 index 8ef75e351..000000000 --- a/src/test/ui/pattern/usefulness/issue-35609.rs +++ /dev/null @@ -1,43 +0,0 @@ -enum Enum { - A, B, C, D, E, F -} -use Enum::*; - -struct S(Enum, ()); -struct Sd { x: Enum, y: () } - -fn main() { - match (A, ()) { //~ ERROR non-exhaustive - (A, _) => {} - } - - match (A, A) { //~ ERROR non-exhaustive - (_, A) => {} - } - - match ((A, ()), ()) { //~ ERROR non-exhaustive - ((A, ()), _) => {} - } - - match ((A, ()), A) { //~ ERROR non-exhaustive - ((A, ()), _) => {} - } - - match ((A, ()), ()) { //~ ERROR non-exhaustive - ((A, _), _) => {} - } - - - match S(A, ()) { //~ ERROR non-exhaustive - S(A, _) => {} - } - - match (Sd { x: A, y: () }) { //~ ERROR non-exhaustive - Sd { x: A, y: _ } => {} - } - - match Some(A) { //~ ERROR non-exhaustive - Some(A) => (), - None => () - } -} diff --git a/src/test/ui/pattern/usefulness/issue-35609.stderr b/src/test/ui/pattern/usefulness/issue-35609.stderr deleted file mode 100644 index c9781d52e..000000000 --- a/src/test/ui/pattern/usefulness/issue-35609.stderr +++ /dev/null @@ -1,122 +0,0 @@ -error[E0004]: non-exhaustive patterns: `(Enum::B, _)`, `(Enum::C, _)`, `(Enum::D, _)` and 2 more not covered - --> $DIR/issue-35609.rs:10:11 - | -LL | match (A, ()) { - | ^^^^^^^ patterns `(Enum::B, _)`, `(Enum::C, _)`, `(Enum::D, _)` and 2 more not covered - | - = note: the matched value is of type `(Enum, ())` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ (A, _) => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `(_, Enum::B)`, `(_, Enum::C)`, `(_, Enum::D)` and 2 more not covered - --> $DIR/issue-35609.rs:14:11 - | -LL | match (A, A) { - | ^^^^^^ patterns `(_, Enum::B)`, `(_, Enum::C)`, `(_, Enum::D)` and 2 more not covered - | - = note: the matched value is of type `(Enum, Enum)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ (_, A) => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `((Enum::B, _), _)`, `((Enum::C, _), _)`, `((Enum::D, _), _)` and 2 more not covered - --> $DIR/issue-35609.rs:18:11 - | -LL | match ((A, ()), ()) { - | ^^^^^^^^^^^^^ patterns `((Enum::B, _), _)`, `((Enum::C, _), _)`, `((Enum::D, _), _)` and 2 more not covered - | - = note: the matched value is of type `((Enum, ()), ())` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ ((A, ()), _) => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `((Enum::B, _), _)`, `((Enum::C, _), _)`, `((Enum::D, _), _)` and 2 more not covered - --> $DIR/issue-35609.rs:22:11 - | -LL | match ((A, ()), A) { - | ^^^^^^^^^^^^ patterns `((Enum::B, _), _)`, `((Enum::C, _), _)`, `((Enum::D, _), _)` and 2 more not covered - | - = note: the matched value is of type `((Enum, ()), Enum)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ ((A, ()), _) => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `((Enum::B, _), _)`, `((Enum::C, _), _)`, `((Enum::D, _), _)` and 2 more not covered - --> $DIR/issue-35609.rs:26:11 - | -LL | match ((A, ()), ()) { - | ^^^^^^^^^^^^^ patterns `((Enum::B, _), _)`, `((Enum::C, _), _)`, `((Enum::D, _), _)` and 2 more not covered - | - = note: the matched value is of type `((Enum, ()), ())` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ ((A, _), _) => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `S(Enum::B, _)`, `S(Enum::C, _)`, `S(Enum::D, _)` and 2 more not covered - --> $DIR/issue-35609.rs:31:11 - | -LL | match S(A, ()) { - | ^^^^^^^^ patterns `S(Enum::B, _)`, `S(Enum::C, _)`, `S(Enum::D, _)` and 2 more not covered - | -note: `S` defined here - --> $DIR/issue-35609.rs:6:8 - | -LL | struct S(Enum, ()); - | ^ - = note: the matched value is of type `S` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ S(A, _) => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `Sd { x: Enum::B, .. }`, `Sd { x: Enum::C, .. }`, `Sd { x: Enum::D, .. }` and 2 more not covered - --> $DIR/issue-35609.rs:35:11 - | -LL | match (Sd { x: A, y: () }) { - | ^^^^^^^^^^^^^^^^^^^^ patterns `Sd { x: Enum::B, .. }`, `Sd { x: Enum::C, .. }`, `Sd { x: Enum::D, .. }` and 2 more not covered - | -note: `Sd` defined here - --> $DIR/issue-35609.rs:7:8 - | -LL | struct Sd { x: Enum, y: () } - | ^^ - = note: the matched value is of type `Sd` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ Sd { x: A, y: _ } => {} -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `Some(Enum::B)`, `Some(Enum::C)`, `Some(Enum::D)` and 2 more not covered - --> $DIR/issue-35609.rs:39:11 - | -LL | match Some(A) { - | ^^^^^^^ patterns `Some(Enum::B)`, `Some(Enum::C)`, `Some(Enum::D)` and 2 more not covered - | -note: `Option<Enum>` defined here - --> $SRC_DIR/core/src/option.rs:LL:COL - | -LL | pub enum Option<T> { - | ^^^^^^^^^^^^^^^^^^ - = note: the matched value is of type `Option<Enum>` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ None => (), -LL + _ => todo!() - | - -error: aborting due to 8 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-3601.rs b/src/test/ui/pattern/usefulness/issue-3601.rs deleted file mode 100644 index 6215a2398..000000000 --- a/src/test/ui/pattern/usefulness/issue-3601.rs +++ /dev/null @@ -1,34 +0,0 @@ -#![feature(box_patterns)] - -struct HTMLImageData { - image: Option<String> -} - -struct ElementData { - kind: Box<ElementKind> -} - -enum ElementKind { - HTMLImageElement(HTMLImageData) -} - -enum NodeKind { - Element(ElementData) -} - -struct NodeData { - kind: Box<NodeKind>, -} - -fn main() { - let mut id = HTMLImageData { image: None }; - let ed = ElementData { kind: Box::new(ElementKind::HTMLImageElement(id)) }; - let n = NodeData { kind: Box::new(NodeKind::Element(ed)) }; - - // n.b. span could be better - match n.kind { - box NodeKind::Element(ed) => match ed.kind { //~ ERROR non-exhaustive patterns - box ElementKind::HTMLImageElement(ref d) if d.image.is_some() => { true } - }, - }; -} diff --git a/src/test/ui/pattern/usefulness/issue-3601.stderr b/src/test/ui/pattern/usefulness/issue-3601.stderr deleted file mode 100644 index eb8c63919..000000000 --- a/src/test/ui/pattern/usefulness/issue-3601.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error[E0004]: non-exhaustive patterns: `box _` not covered - --> $DIR/issue-3601.rs:30:44 - | -LL | box NodeKind::Element(ed) => match ed.kind { - | ^^^^^^^ pattern `box _` not covered - | -note: `Box<ElementKind>` defined here - --> $SRC_DIR/alloc/src/boxed.rs:LL:COL - | -LL | / pub struct Box< -LL | | T: ?Sized, -LL | | #[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global, -LL | | >(Unique<T>, A); - | |_^ - = note: the matched value is of type `Box<ElementKind>` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ box ElementKind::HTMLImageElement(ref d) if d.image.is_some() => { true } -LL + box _ => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-39362.rs b/src/test/ui/pattern/usefulness/issue-39362.rs deleted file mode 100644 index ea3c8f88e..000000000 --- a/src/test/ui/pattern/usefulness/issue-39362.rs +++ /dev/null @@ -1,18 +0,0 @@ -enum Foo { - Bar { bar: Bar, id: usize } -} - -enum Bar { - A, B, C, D, E, F -} - -fn test(f: Foo) { - match f { - //~^ ERROR non-exhaustive patterns - //~| patterns - Foo::Bar { bar: Bar::A, .. } => (), - Foo::Bar { bar: Bar::B, .. } => (), - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/issue-39362.stderr b/src/test/ui/pattern/usefulness/issue-39362.stderr deleted file mode 100644 index b8b17918a..000000000 --- a/src/test/ui/pattern/usefulness/issue-39362.stderr +++ /dev/null @@ -1,23 +0,0 @@ -error[E0004]: non-exhaustive patterns: `Foo::Bar { bar: Bar::C, .. }`, `Foo::Bar { bar: Bar::D, .. }`, `Foo::Bar { bar: Bar::E, .. }` and 1 more not covered - --> $DIR/issue-39362.rs:10:11 - | -LL | match f { - | ^ patterns `Foo::Bar { bar: Bar::C, .. }`, `Foo::Bar { bar: Bar::D, .. }`, `Foo::Bar { bar: Bar::E, .. }` and 1 more not covered - | -note: `Foo` defined here - --> $DIR/issue-39362.rs:2:5 - | -LL | enum Foo { - | --- -LL | Bar { bar: Bar, id: usize } - | ^^^ not covered - = note: the matched value is of type `Foo` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ Foo::Bar { bar: Bar::B, .. } => (), -LL ~ _ => todo!(), - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-40221.rs b/src/test/ui/pattern/usefulness/issue-40221.rs deleted file mode 100644 index e1f7e975b..000000000 --- a/src/test/ui/pattern/usefulness/issue-40221.rs +++ /dev/null @@ -1,16 +0,0 @@ -enum P { - C(PC), -} - -enum PC { - Q, - QA, -} - -fn test(proto: P) { - match proto { //~ ERROR non-exhaustive patterns - P::C(PC::Q) => (), - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/issue-40221.stderr b/src/test/ui/pattern/usefulness/issue-40221.stderr deleted file mode 100644 index 4973e42b0..000000000 --- a/src/test/ui/pattern/usefulness/issue-40221.stderr +++ /dev/null @@ -1,23 +0,0 @@ -error[E0004]: non-exhaustive patterns: `P::C(PC::QA)` not covered - --> $DIR/issue-40221.rs:11:11 - | -LL | match proto { - | ^^^^^ pattern `P::C(PC::QA)` not covered - | -note: `P` defined here - --> $DIR/issue-40221.rs:2:5 - | -LL | enum P { - | - -LL | C(PC), - | ^ not covered - = note: the matched value is of type `P` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ P::C(PC::Q) => (), -LL ~ P::C(PC::QA) => todo!(), - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-4321.rs b/src/test/ui/pattern/usefulness/issue-4321.rs deleted file mode 100644 index 9715f2eba..000000000 --- a/src/test/ui/pattern/usefulness/issue-4321.rs +++ /dev/null @@ -1,8 +0,0 @@ -fn main() { - let tup = (true, true); - println!("foo {:}", match tup { //~ ERROR non-exhaustive patterns: `(true, false)` not covered - (false, false) => "foo", - (false, true) => "bar", - (true, true) => "baz" - }); -} diff --git a/src/test/ui/pattern/usefulness/issue-4321.stderr b/src/test/ui/pattern/usefulness/issue-4321.stderr deleted file mode 100644 index 293273174..000000000 --- a/src/test/ui/pattern/usefulness/issue-4321.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error[E0004]: non-exhaustive patterns: `(true, false)` not covered - --> $DIR/issue-4321.rs:3:31 - | -LL | println!("foo {:}", match tup { - | ^^^ pattern `(true, false)` not covered - | - = note: the matched value is of type `(bool, bool)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ (true, true) => "baz", -LL + (true, false) => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-50900.rs b/src/test/ui/pattern/usefulness/issue-50900.rs deleted file mode 100644 index 9cc760e9a..000000000 --- a/src/test/ui/pattern/usefulness/issue-50900.rs +++ /dev/null @@ -1,19 +0,0 @@ -#[derive(PartialEq, Eq)] -pub struct Tag(pub Context, pub u16); - -#[derive(PartialEq, Eq)] -pub enum Context { - Tiff, - Exif, -} - -impl Tag { - const ExifIFDPointer: Tag = Tag(Context::Tiff, 34665); -} - -fn main() { - match Tag::ExifIFDPointer { - //~^ ERROR: non-exhaustive patterns: `Tag(Context::Exif, _)` not covered - Tag::ExifIFDPointer => {} - } -} diff --git a/src/test/ui/pattern/usefulness/issue-50900.stderr b/src/test/ui/pattern/usefulness/issue-50900.stderr deleted file mode 100644 index 348246d28..000000000 --- a/src/test/ui/pattern/usefulness/issue-50900.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0004]: non-exhaustive patterns: `Tag(Context::Exif, _)` not covered - --> $DIR/issue-50900.rs:15:11 - | -LL | match Tag::ExifIFDPointer { - | ^^^^^^^^^^^^^^^^^^^ pattern `Tag(Context::Exif, _)` not covered - | -note: `Tag` defined here - --> $DIR/issue-50900.rs:2:12 - | -LL | pub struct Tag(pub Context, pub u16); - | ^^^ - = note: the matched value is of type `Tag` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ Tag::ExifIFDPointer => {} -LL + Tag(Context::Exif, _) => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-53820-slice-pattern-large-array.rs b/src/test/ui/pattern/usefulness/issue-53820-slice-pattern-large-array.rs deleted file mode 100644 index 5b0482de2..000000000 --- a/src/test/ui/pattern/usefulness/issue-53820-slice-pattern-large-array.rs +++ /dev/null @@ -1,11 +0,0 @@ -// check-pass - -// This used to cause a stack overflow during exhaustiveness checking in the compiler. - -fn main() { - const LARGE_SIZE: usize = 1024 * 1024; - let [..] = [0u8; LARGE_SIZE]; - match [0u8; LARGE_SIZE] { - [..] => {} - } -} diff --git a/src/test/ui/pattern/usefulness/issue-56379.rs b/src/test/ui/pattern/usefulness/issue-56379.rs deleted file mode 100644 index 097cf98d0..000000000 --- a/src/test/ui/pattern/usefulness/issue-56379.rs +++ /dev/null @@ -1,14 +0,0 @@ -enum Foo { - A(bool), - B(bool), - C(bool), -} - -fn main() { - match Foo::A(true) { - //~^ ERROR non-exhaustive patterns: `Foo::A(false)`, `Foo::B(false)` and `Foo::C(false)` not covered - Foo::A(true) => {} - Foo::B(true) => {} - Foo::C(true) => {} - } -} diff --git a/src/test/ui/pattern/usefulness/issue-56379.stderr b/src/test/ui/pattern/usefulness/issue-56379.stderr deleted file mode 100644 index 6eed6bfae..000000000 --- a/src/test/ui/pattern/usefulness/issue-56379.stderr +++ /dev/null @@ -1,27 +0,0 @@ -error[E0004]: non-exhaustive patterns: `Foo::A(false)`, `Foo::B(false)` and `Foo::C(false)` not covered - --> $DIR/issue-56379.rs:8:11 - | -LL | match Foo::A(true) { - | ^^^^^^^^^^^^ patterns `Foo::A(false)`, `Foo::B(false)` and `Foo::C(false)` not covered - | -note: `Foo` defined here - --> $DIR/issue-56379.rs:2:5 - | -LL | enum Foo { - | --- -LL | A(bool), - | ^ not covered -LL | B(bool), - | ^ not covered -LL | C(bool), - | ^ not covered - = note: the matched value is of type `Foo` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ Foo::C(true) => {} -LL + Foo::A(false) | Foo::B(false) | Foo::C(false) => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-57472.rs b/src/test/ui/pattern/usefulness/issue-57472.rs deleted file mode 100644 index 113100637..000000000 --- a/src/test/ui/pattern/usefulness/issue-57472.rs +++ /dev/null @@ -1,35 +0,0 @@ -#![crate_type="lib"] -#![deny(unreachable_patterns)] - -mod test_struct { - // Test the exact copy of the minimal example - // posted in the issue. - pub struct Punned { - foo: [u8; 1], - bar: [u8; 1], - } - - pub fn test(punned: Punned) { - match punned { - Punned { foo: [_], .. } => println!("foo"), - Punned { bar: [_], .. } => println!("bar"), - //~^ ERROR unreachable pattern [unreachable_patterns] - } - } -} - -mod test_union { - // Test the same thing using a union. - pub union Punned { - foo: [u8; 1], - bar: [u8; 1], - } - - pub fn test(punned: Punned) { - match punned { - Punned { foo: [_] } => println!("foo"), - Punned { bar: [_] } => println!("bar"), - //~^ ERROR unreachable pattern [unreachable_patterns] - } - } -} diff --git a/src/test/ui/pattern/usefulness/issue-57472.stderr b/src/test/ui/pattern/usefulness/issue-57472.stderr deleted file mode 100644 index 26efdf6db..000000000 --- a/src/test/ui/pattern/usefulness/issue-57472.stderr +++ /dev/null @@ -1,20 +0,0 @@ -error: unreachable pattern - --> $DIR/issue-57472.rs:15:13 - | -LL | Punned { bar: [_], .. } => println!("bar"), - | ^^^^^^^^^^^^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/issue-57472.rs:2:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/issue-57472.rs:31:13 - | -LL | Punned { bar: [_] } => println!("bar"), - | ^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/pattern/usefulness/issue-65413-constants-and-slices-exhaustiveness.rs b/src/test/ui/pattern/usefulness/issue-65413-constants-and-slices-exhaustiveness.rs deleted file mode 100644 index 54dfa889e..000000000 --- a/src/test/ui/pattern/usefulness/issue-65413-constants-and-slices-exhaustiveness.rs +++ /dev/null @@ -1,15 +0,0 @@ -// check-pass - -#![deny(unreachable_patterns)] - -const C0: &'static [u8] = b"\x00"; - -fn main() { - let x: &[u8] = &[0]; - match x { - &[] => {} - &[1..=255] => {} - C0 => {} - &[_, _, ..] => {} - } -} diff --git a/src/test/ui/pattern/usefulness/issue-66501.rs b/src/test/ui/pattern/usefulness/issue-66501.rs deleted file mode 100644 index ffcfd4ad8..000000000 --- a/src/test/ui/pattern/usefulness/issue-66501.rs +++ /dev/null @@ -1,12 +0,0 @@ -// check-pass - -#![allow(unreachable_patterns)] - -fn main() { - const CONST: &[Option<()>; 1] = &[Some(())]; - match &[Some(())] { - &[None] => {} - CONST => {} - &[Some(())] => {} - } -} diff --git a/src/test/ui/pattern/usefulness/issue-71930-type-of-match-scrutinee.rs b/src/test/ui/pattern/usefulness/issue-71930-type-of-match-scrutinee.rs deleted file mode 100644 index e2ff9ac87..000000000 --- a/src/test/ui/pattern/usefulness/issue-71930-type-of-match-scrutinee.rs +++ /dev/null @@ -1,22 +0,0 @@ -// check-pass - -// In PR 71930, it was discovered that the code to retrieve the inferred type of a match scrutinee -// was incorrect. - -fn f() -> ! { - panic!() -} - -fn g() -> usize { - match f() { // Should infer type `bool` - false => 0, - true => 1, - } -} - -fn h() -> usize { - match f() { // Should infer type `!` - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/issue-72377.rs b/src/test/ui/pattern/usefulness/issue-72377.rs deleted file mode 100644 index b5ad3075c..000000000 --- a/src/test/ui/pattern/usefulness/issue-72377.rs +++ /dev/null @@ -1,17 +0,0 @@ -#[derive(PartialEq, Eq)] -enum X { A, B, C, } - -fn main() { - let x = X::A; - let y = Some(X::A); - - match (x, y) { - //~^ ERROR non-exhaustive patterns: `(X::A, Some(X::A))`, `(X::A, Some(X::B))`, `(X::B, Some(X::B))` and 2 - //~| more not covered - (_, None) => false, - (v, Some(w)) if v == w => true, - (X::B, Some(X::C)) => false, - (X::B, Some(X::A)) => false, - (X::A, Some(X::C)) | (X::C, Some(X::A)) => false, - }; -} diff --git a/src/test/ui/pattern/usefulness/issue-72377.stderr b/src/test/ui/pattern/usefulness/issue-72377.stderr deleted file mode 100644 index 123dd051d..000000000 --- a/src/test/ui/pattern/usefulness/issue-72377.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error[E0004]: non-exhaustive patterns: `(X::A, Some(X::A))`, `(X::A, Some(X::B))`, `(X::B, Some(X::B))` and 2 more not covered - --> $DIR/issue-72377.rs:8:11 - | -LL | match (x, y) { - | ^^^^^^ patterns `(X::A, Some(X::A))`, `(X::A, Some(X::B))`, `(X::B, Some(X::B))` and 2 more not covered - | - = note: the matched value is of type `(X, Option<X>)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ (X::A, Some(X::C)) | (X::C, Some(X::A)) => false, -LL ~ _ => todo!(), - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-72476-and-89393-associated-type.rs b/src/test/ui/pattern/usefulness/issue-72476-and-89393-associated-type.rs deleted file mode 100644 index 058f41967..000000000 --- a/src/test/ui/pattern/usefulness/issue-72476-and-89393-associated-type.rs +++ /dev/null @@ -1,56 +0,0 @@ -// check-pass - -// From https://github.com/rust-lang/rust/issues/72476 -// and https://github.com/rust-lang/rust/issues/89393 - -trait Trait { - type Projection; -} - -struct A; -impl Trait for A { - type Projection = bool; -} - -struct B; -impl Trait for B { - type Projection = (u32, u32); -} - -struct Next<T: Trait>(T::Projection); - -fn foo1(item: Next<A>) { - match item { - Next(true) => {} - Next(false) => {} - } -} - -fn foo2(x: <A as Trait>::Projection) { - match x { - true => {} - false => {} - } -} - -fn foo3(x: Next<B>) { - let Next((_, _)) = x; - match x { - Next((_, _)) => {} - } -} - -fn foo4(x: <B as Trait>::Projection) { - let (_, _) = x; - match x { - (_, _) => {} - } -} - -fn foo5<T: Trait>(x: <T as Trait>::Projection) { - match x { - _ => {} - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/issue-78123-non-exhaustive-reference.rs b/src/test/ui/pattern/usefulness/issue-78123-non-exhaustive-reference.rs deleted file mode 100644 index cbfcf0eaf..000000000 --- a/src/test/ui/pattern/usefulness/issue-78123-non-exhaustive-reference.rs +++ /dev/null @@ -1,12 +0,0 @@ -enum A {} - //~^ NOTE `A` defined here - //~| NOTE - -fn f(a: &A) { - match a {} - //~^ ERROR non-exhaustive patterns: type `&A` is non-empty - //~| NOTE the matched value is of type `&A` - //~| NOTE references are always considered inhabited -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/issue-78123-non-exhaustive-reference.stderr b/src/test/ui/pattern/usefulness/issue-78123-non-exhaustive-reference.stderr deleted file mode 100644 index bf05d616d..000000000 --- a/src/test/ui/pattern/usefulness/issue-78123-non-exhaustive-reference.stderr +++ /dev/null @@ -1,23 +0,0 @@ -error[E0004]: non-exhaustive patterns: type `&A` is non-empty - --> $DIR/issue-78123-non-exhaustive-reference.rs:6:11 - | -LL | match a {} - | ^ - | -note: `A` defined here - --> $DIR/issue-78123-non-exhaustive-reference.rs:1:6 - | -LL | enum A {} - | ^ - = note: the matched value is of type `&A` - = note: references are always considered inhabited -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown - | -LL ~ match a { -LL + _ => todo!(), -LL + } - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/issue-78549-ref-pat-and-str.rs b/src/test/ui/pattern/usefulness/issue-78549-ref-pat-and-str.rs deleted file mode 100644 index 2879caf2c..000000000 --- a/src/test/ui/pattern/usefulness/issue-78549-ref-pat-and-str.rs +++ /dev/null @@ -1,25 +0,0 @@ -// check-pass -// From https://github.com/rust-lang/rust/issues/78549 - -fn main() { - match "foo" { - "foo" => {}, - &_ => {}, - } - - match "foo" { - &_ => {}, - "foo" => {}, - } - - match ("foo", 0, "bar") { - (&_, 0, &_) => {}, - ("foo", _, "bar") => {}, - (&_, _, &_) => {}, - } - - match (&"foo", "bar") { - (&"foo", &_) => {}, - (&&_, &_) => {}, - } -} diff --git a/src/test/ui/pattern/usefulness/issue-80501-or-pat-and-macro.rs b/src/test/ui/pattern/usefulness/issue-80501-or-pat-and-macro.rs deleted file mode 100644 index aac7d7d53..000000000 --- a/src/test/ui/pattern/usefulness/issue-80501-or-pat-and-macro.rs +++ /dev/null @@ -1,27 +0,0 @@ -// check-pass -#![deny(unreachable_patterns)] -pub enum TypeCtor { - Slice, - Array, -} - -pub struct ApplicationTy(TypeCtor); - -macro_rules! ty_app { - ($ctor:pat) => { - ApplicationTy($ctor) - }; -} - -fn _foo(ty: ApplicationTy) { - match ty { - ty_app!(TypeCtor::Array) | ty_app!(TypeCtor::Slice) => {} - } - - // same as above, with the macro expanded - match ty { - ApplicationTy(TypeCtor::Array) | ApplicationTy(TypeCtor::Slice) => {} - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/issue-82772-match-box-as-struct.rs b/src/test/ui/pattern/usefulness/issue-82772-match-box-as-struct.rs deleted file mode 100644 index c1bfcc734..000000000 --- a/src/test/ui/pattern/usefulness/issue-82772-match-box-as-struct.rs +++ /dev/null @@ -1,6 +0,0 @@ -// This used to ICE in exhaustiveness checking. Explanation here: -// https://github.com/rust-lang/rust/issues/82772#issuecomment-905946768 -fn main() { - let Box { 1: _, .. }: Box<()>; //~ ERROR field `1` of - let Box { .. }: Box<()>; -} diff --git a/src/test/ui/pattern/usefulness/issue-82772-match-box-as-struct.stderr b/src/test/ui/pattern/usefulness/issue-82772-match-box-as-struct.stderr deleted file mode 100644 index 2c8c85bb1..000000000 --- a/src/test/ui/pattern/usefulness/issue-82772-match-box-as-struct.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0451]: field `1` of struct `Box` is private - --> $DIR/issue-82772-match-box-as-struct.rs:4:15 - | -LL | let Box { 1: _, .. }: Box<()>; - | ^^^^ private field - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0451`. diff --git a/src/test/ui/pattern/usefulness/issue-88747.rs b/src/test/ui/pattern/usefulness/issue-88747.rs deleted file mode 100644 index 948c99f9c..000000000 --- a/src/test/ui/pattern/usefulness/issue-88747.rs +++ /dev/null @@ -1,14 +0,0 @@ -// check-pass: this used to be a stack overflow because of recursion in `usefulness.rs` - -macro_rules! long_tuple_arg { - ([$($t:tt)*]#$($h:tt)*) => { - long_tuple_arg!{[$($t)*$($t)*]$($h)*} - }; - ([$([$t:tt $y:tt])*]) => { - pub fn _f(($($t,)*): ($($y,)*)) {} - } -} - -long_tuple_arg!{[[_ u8]]########## ###} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/match-arm-statics-2.rs b/src/test/ui/pattern/usefulness/match-arm-statics-2.rs deleted file mode 100644 index 3c9c16561..000000000 --- a/src/test/ui/pattern/usefulness/match-arm-statics-2.rs +++ /dev/null @@ -1,62 +0,0 @@ -use self::Direction::{North, East, South, West}; - -#[derive(PartialEq, Eq)] -struct NewBool(bool); - -#[derive(PartialEq, Eq)] -enum Direction { - North, - East, - South, - West -} - -const TRUE_TRUE: (bool, bool) = (true, true); - -fn nonexhaustive_1() { - match (true, false) { - //~^ ERROR non-exhaustive patterns: `(true, false)` not covered - TRUE_TRUE => (), - (false, false) => (), - (false, true) => () - } -} - -const NONE: Option<Direction> = None; -const EAST: Direction = East; - -fn nonexhaustive_2() { - match Some(Some(North)) { - //~^ ERROR non-exhaustive patterns: `Some(Some(Direction::West))` not covered - Some(NONE) => (), - Some(Some(North)) => (), - Some(Some(EAST)) => (), - Some(Some(South)) => (), - None => () - } -} - -const NEW_FALSE: NewBool = NewBool(false); -struct Foo { - bar: Option<Direction>, - baz: NewBool -} - -const STATIC_FOO: Foo = Foo { bar: None, baz: NEW_FALSE }; - -fn nonexhaustive_3() { - match (Foo { bar: Some(North), baz: NewBool(true) }) { - //~^ ERROR non-exhaustive patterns: `Foo { bar: Some(Direction::North), baz: NewBool(true) }` - Foo { bar: None, baz: NewBool(true) } => (), - Foo { bar: _, baz: NEW_FALSE } => (), - Foo { bar: Some(West), baz: NewBool(true) } => (), - Foo { bar: Some(South), .. } => (), - Foo { bar: Some(EAST), .. } => () - } -} - -fn main() { - nonexhaustive_1(); - nonexhaustive_2(); - nonexhaustive_3(); -} diff --git a/src/test/ui/pattern/usefulness/match-arm-statics-2.stderr b/src/test/ui/pattern/usefulness/match-arm-statics-2.stderr deleted file mode 100644 index b0d7fe5eb..000000000 --- a/src/test/ui/pattern/usefulness/match-arm-statics-2.stderr +++ /dev/null @@ -1,58 +0,0 @@ -error[E0004]: non-exhaustive patterns: `(true, false)` not covered - --> $DIR/match-arm-statics-2.rs:17:11 - | -LL | match (true, false) { - | ^^^^^^^^^^^^^ pattern `(true, false)` not covered - | - = note: the matched value is of type `(bool, bool)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ (false, true) => (), -LL + (true, false) => todo!() - | - -error[E0004]: non-exhaustive patterns: `Some(Some(Direction::West))` not covered - --> $DIR/match-arm-statics-2.rs:29:11 - | -LL | match Some(Some(North)) { - | ^^^^^^^^^^^^^^^^^ pattern `Some(Some(Direction::West))` not covered - | -note: `Option<Option<Direction>>` defined here - --> $SRC_DIR/core/src/option.rs:LL:COL - | -LL | pub enum Option<T> { - | ------------------ -... -LL | Some(#[stable(feature = "rust1", since = "1.0.0")] T), - | ^^^^ - | | - | not covered - | not covered - = note: the matched value is of type `Option<Option<Direction>>` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ None => (), -LL + Some(Some(Direction::West)) => todo!() - | - -error[E0004]: non-exhaustive patterns: `Foo { bar: Some(Direction::North), baz: NewBool(true) }` not covered - --> $DIR/match-arm-statics-2.rs:48:11 - | -LL | match (Foo { bar: Some(North), baz: NewBool(true) }) { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `Foo { bar: Some(Direction::North), baz: NewBool(true) }` not covered - | -note: `Foo` defined here - --> $DIR/match-arm-statics-2.rs:40:8 - | -LL | struct Foo { - | ^^^ - = note: the matched value is of type `Foo` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ Foo { bar: Some(EAST), .. } => (), -LL + Foo { bar: Some(Direction::North), baz: NewBool(true) } => todo!() - | - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/match-arm-statics.rs b/src/test/ui/pattern/usefulness/match-arm-statics.rs deleted file mode 100644 index 91db76ebb..000000000 --- a/src/test/ui/pattern/usefulness/match-arm-statics.rs +++ /dev/null @@ -1,69 +0,0 @@ -#![allow(dead_code)] -#![deny(unreachable_patterns)] - -use self::Direction::{North, East, South, West}; - -#[derive(PartialEq, Eq)] -struct NewBool(bool); - -#[derive(PartialEq, Eq)] -enum Direction { - North, - East, - South, - West -} - -const TRUE_TRUE: (bool, bool) = (true, true); - -fn unreachable_1() { - match (true, false) { - TRUE_TRUE => (), - (false, false) => (), - (false, true) => (), - (true, false) => (), - (true, true) => () - //~^ ERROR unreachable pattern - } -} - -const NONE: Option<Direction> = None; -const EAST: Direction = East; - -fn unreachable_2() { - match Some(Some(North)) { - Some(NONE) => (), - Some(Some(North)) => (), - Some(Some(EAST)) => (), - Some(Some(South)) => (), - Some(Some(West)) => (), - Some(Some(East)) => (), - //~^ ERROR unreachable pattern - None => () - } -} - -const NEW_FALSE: NewBool = NewBool(false); -struct Foo { - bar: Option<Direction>, - baz: NewBool -} - -fn unreachable_3() { - match (Foo { bar: Some(EAST), baz: NewBool(true) }) { - Foo { bar: None, baz: NewBool(true) } => (), - Foo { bar: _, baz: NEW_FALSE } => (), - Foo { bar: Some(West), baz: NewBool(true) } => (), - Foo { bar: Some(South), .. } => (), - Foo { bar: Some(EAST), .. } => (), - Foo { bar: Some(North), baz: NewBool(true) } => (), - Foo { bar: Some(EAST), baz: NewBool(false) } => () - //~^ ERROR unreachable pattern - } -} - -fn main() { - unreachable_1(); - unreachable_2(); - unreachable_3(); -} diff --git a/src/test/ui/pattern/usefulness/match-arm-statics.stderr b/src/test/ui/pattern/usefulness/match-arm-statics.stderr deleted file mode 100644 index a5dffebf6..000000000 --- a/src/test/ui/pattern/usefulness/match-arm-statics.stderr +++ /dev/null @@ -1,26 +0,0 @@ -error: unreachable pattern - --> $DIR/match-arm-statics.rs:25:9 - | -LL | (true, true) => () - | ^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/match-arm-statics.rs:2:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/match-arm-statics.rs:40:9 - | -LL | Some(Some(East)) => (), - | ^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/match-arm-statics.rs:60:9 - | -LL | Foo { bar: Some(EAST), baz: NewBool(false) } => () - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 3 previous errors - diff --git a/src/test/ui/pattern/usefulness/match-byte-array-patterns-2.rs b/src/test/ui/pattern/usefulness/match-byte-array-patterns-2.rs deleted file mode 100644 index 33468d03f..000000000 --- a/src/test/ui/pattern/usefulness/match-byte-array-patterns-2.rs +++ /dev/null @@ -1,13 +0,0 @@ -fn main() { - let buf = &[0, 1, 2, 3]; - - match buf { //~ ERROR non-exhaustive - b"AAAA" => {} - } - - let buf: &[u8] = buf; - - match buf { //~ ERROR non-exhaustive - b"AAAA" => {} - } -} diff --git a/src/test/ui/pattern/usefulness/match-byte-array-patterns-2.stderr b/src/test/ui/pattern/usefulness/match-byte-array-patterns-2.stderr deleted file mode 100644 index a90f32f7a..000000000 --- a/src/test/ui/pattern/usefulness/match-byte-array-patterns-2.stderr +++ /dev/null @@ -1,29 +0,0 @@ -error[E0004]: non-exhaustive patterns: `&[0_u8..=64_u8, _, _, _]` and `&[66_u8..=u8::MAX, _, _, _]` not covered - --> $DIR/match-byte-array-patterns-2.rs:4:11 - | -LL | match buf { - | ^^^ patterns `&[0_u8..=64_u8, _, _, _]` and `&[66_u8..=u8::MAX, _, _, _]` not covered - | - = note: the matched value is of type `&[u8; 4]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ b"AAAA" => {} -LL + &[0_u8..=64_u8, _, _, _] | &[66_u8..=u8::MAX, _, _, _] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[]`, `&[_]`, `&[_, _]` and 2 more not covered - --> $DIR/match-byte-array-patterns-2.rs:10:11 - | -LL | match buf { - | ^^^ patterns `&[]`, `&[_]`, `&[_, _]` and 2 more not covered - | - = note: the matched value is of type `&[u8]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ b"AAAA" => {} -LL + _ => todo!() - | - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/match-byte-array-patterns.rs b/src/test/ui/pattern/usefulness/match-byte-array-patterns.rs deleted file mode 100644 index 9b6c8bd55..000000000 --- a/src/test/ui/pattern/usefulness/match-byte-array-patterns.rs +++ /dev/null @@ -1,55 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - let buf = &[0, 1, 2, 3]; - - match buf { - b"AAAA" => {}, - &[0x41, 0x41, 0x41, 0x41] => {} //~ ERROR unreachable pattern - _ => {} - } - - match buf { - &[0x41, 0x41, 0x41, 0x41] => {} - b"AAAA" => {}, //~ ERROR unreachable pattern - _ => {} - } - - match buf { - &[_, 0x41, 0x41, 0x41] => {}, - b"AAAA" => {}, //~ ERROR unreachable pattern - _ => {} - } - - match buf { - &[0x41, .., 0x41] => {} - b"AAAA" => {}, //~ ERROR unreachable pattern - _ => {} - } - - let buf: &[u8] = buf; - - match buf { - b"AAAA" => {}, - &[0x41, 0x41, 0x41, 0x41] => {} //~ ERROR unreachable pattern - _ => {} - } - - match buf { - &[0x41, 0x41, 0x41, 0x41] => {} - b"AAAA" => {}, //~ ERROR unreachable pattern - _ => {} - } - - match buf { - &[_, 0x41, 0x41, 0x41] => {}, - b"AAAA" => {}, //~ ERROR unreachable pattern - _ => {} - } - - match buf { - &[0x41, .., 0x41] => {} - b"AAAA" => {}, //~ ERROR unreachable pattern - _ => {} - } -} diff --git a/src/test/ui/pattern/usefulness/match-byte-array-patterns.stderr b/src/test/ui/pattern/usefulness/match-byte-array-patterns.stderr deleted file mode 100644 index 0c582be8d..000000000 --- a/src/test/ui/pattern/usefulness/match-byte-array-patterns.stderr +++ /dev/null @@ -1,56 +0,0 @@ -error: unreachable pattern - --> $DIR/match-byte-array-patterns.rs:8:9 - | -LL | &[0x41, 0x41, 0x41, 0x41] => {} - | ^^^^^^^^^^^^^^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/match-byte-array-patterns.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/match-byte-array-patterns.rs:14:9 - | -LL | b"AAAA" => {}, - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/match-byte-array-patterns.rs:20:9 - | -LL | b"AAAA" => {}, - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/match-byte-array-patterns.rs:26:9 - | -LL | b"AAAA" => {}, - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/match-byte-array-patterns.rs:34:9 - | -LL | &[0x41, 0x41, 0x41, 0x41] => {} - | ^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/match-byte-array-patterns.rs:40:9 - | -LL | b"AAAA" => {}, - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/match-byte-array-patterns.rs:46:9 - | -LL | b"AAAA" => {}, - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/match-byte-array-patterns.rs:52:9 - | -LL | b"AAAA" => {}, - | ^^^^^^^ - -error: aborting due to 8 previous errors - diff --git a/src/test/ui/pattern/usefulness/match-non-exhaustive.rs b/src/test/ui/pattern/usefulness/match-non-exhaustive.rs deleted file mode 100644 index 3b210a115..000000000 --- a/src/test/ui/pattern/usefulness/match-non-exhaustive.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - match 0 { 1 => () } //~ ERROR non-exhaustive patterns - match 0 { 0 if false => () } //~ ERROR non-exhaustive patterns -} diff --git a/src/test/ui/pattern/usefulness/match-non-exhaustive.stderr b/src/test/ui/pattern/usefulness/match-non-exhaustive.stderr deleted file mode 100644 index 08dde523a..000000000 --- a/src/test/ui/pattern/usefulness/match-non-exhaustive.stderr +++ /dev/null @@ -1,27 +0,0 @@ -error[E0004]: non-exhaustive patterns: `i32::MIN..=0_i32` and `2_i32..=i32::MAX` not covered - --> $DIR/match-non-exhaustive.rs:2:11 - | -LL | match 0 { 1 => () } - | ^ patterns `i32::MIN..=0_i32` and `2_i32..=i32::MAX` not covered - | - = note: the matched value is of type `i32` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL | match 0 { 1 => (), i32::MIN..=0_i32 | 2_i32..=i32::MAX => todo!() } - | ++++++++++++++++++++++++++++++++++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/match-non-exhaustive.rs:3:11 - | -LL | match 0 { 0 if false => () } - | ^ pattern `_` not covered - | - = note: the matched value is of type `i32` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match 0 { 0 if false => (), _ => todo!() } - | ++++++++++++++ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/match-privately-empty.rs b/src/test/ui/pattern/usefulness/match-privately-empty.rs deleted file mode 100644 index 315eb03d1..000000000 --- a/src/test/ui/pattern/usefulness/match-privately-empty.rs +++ /dev/null @@ -1,21 +0,0 @@ -#![feature(never_type)] -#![feature(exhaustive_patterns)] - -mod private { - pub struct Private { - _bot: !, - pub misc: bool, - } - pub const DATA: Option<Private> = None; -} - -fn main() { - match private::DATA { - //~^ ERROR non-exhaustive patterns: `Some(Private { misc: true, .. })` not covered - None => {} - Some(private::Private { - misc: false, - .. - }) => {} - } -} diff --git a/src/test/ui/pattern/usefulness/match-privately-empty.stderr b/src/test/ui/pattern/usefulness/match-privately-empty.stderr deleted file mode 100644 index 4607cfaae..000000000 --- a/src/test/ui/pattern/usefulness/match-privately-empty.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error[E0004]: non-exhaustive patterns: `Some(Private { misc: true, .. })` not covered - --> $DIR/match-privately-empty.rs:13:11 - | -LL | match private::DATA { - | ^^^^^^^^^^^^^ pattern `Some(Private { misc: true, .. })` not covered - | -note: `Option<Private>` defined here - --> $SRC_DIR/core/src/option.rs:LL:COL - | -LL | pub enum Option<T> { - | ------------------ -... -LL | Some(#[stable(feature = "rust1", since = "1.0.0")] T), - | ^^^^ not covered - = note: the matched value is of type `Option<Private>` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ }) => {} -LL + Some(Private { misc: true, .. }) => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/match-ref-ice.rs b/src/test/ui/pattern/usefulness/match-ref-ice.rs deleted file mode 100644 index dee110f96..000000000 --- a/src/test/ui/pattern/usefulness/match-ref-ice.rs +++ /dev/null @@ -1,16 +0,0 @@ -#![deny(unreachable_patterns)] - -// The arity of `ref x` is always 1. If the pattern is compared to some non-structural type whose -// arity is always 0, an ICE occurs. -// -// Related issue: #23009 - -fn main() { - let homura = [1, 2, 3]; - - match homura { - [1, ref _madoka, 3] => (), - [1, 2, 3] => (), //~ ERROR unreachable pattern - [_, _, _] => (), - } -} diff --git a/src/test/ui/pattern/usefulness/match-ref-ice.stderr b/src/test/ui/pattern/usefulness/match-ref-ice.stderr deleted file mode 100644 index fad0940ba..000000000 --- a/src/test/ui/pattern/usefulness/match-ref-ice.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: unreachable pattern - --> $DIR/match-ref-ice.rs:13:9 - | -LL | [1, 2, 3] => (), - | ^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/match-ref-ice.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/usefulness/match-slice-patterns.rs b/src/test/ui/pattern/usefulness/match-slice-patterns.rs deleted file mode 100644 index 92d74b8c2..000000000 --- a/src/test/ui/pattern/usefulness/match-slice-patterns.rs +++ /dev/null @@ -1,12 +0,0 @@ -fn check(list: &[Option<()>]) { - match list { - //~^ ERROR `&[_, Some(_), .., None, _]` not covered - &[] => {}, - &[_] => {}, - &[_, _] => {}, - &[_, None, ..] => {}, - &[.., Some(_), _] => {}, - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/match-slice-patterns.stderr b/src/test/ui/pattern/usefulness/match-slice-patterns.stderr deleted file mode 100644 index 961dd5901..000000000 --- a/src/test/ui/pattern/usefulness/match-slice-patterns.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error[E0004]: non-exhaustive patterns: `&[_, Some(_), .., None, _]` not covered - --> $DIR/match-slice-patterns.rs:2:11 - | -LL | match list { - | ^^^^ pattern `&[_, Some(_), .., None, _]` not covered - | - = note: the matched value is of type `&[Option<()>]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ &[.., Some(_), _] => {} -LL ~ &[_, Some(_), .., None, _] => todo!(), - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/match-vec-fixed.rs b/src/test/ui/pattern/usefulness/match-vec-fixed.rs deleted file mode 100644 index e611779de..000000000 --- a/src/test/ui/pattern/usefulness/match-vec-fixed.rs +++ /dev/null @@ -1,18 +0,0 @@ -#![deny(unreachable_patterns)] - -fn a() { - let v = [1, 2, 3]; - match v { - [_, _, _] => {} - [_, _, _] => {} //~ ERROR unreachable pattern - } - match v { - [_, 1, _] => {} - [_, 1, _] => {} //~ ERROR unreachable pattern - _ => {} - } -} - -fn main() { - a(); -} diff --git a/src/test/ui/pattern/usefulness/match-vec-fixed.stderr b/src/test/ui/pattern/usefulness/match-vec-fixed.stderr deleted file mode 100644 index e388a06cb..000000000 --- a/src/test/ui/pattern/usefulness/match-vec-fixed.stderr +++ /dev/null @@ -1,20 +0,0 @@ -error: unreachable pattern - --> $DIR/match-vec-fixed.rs:7:9 - | -LL | [_, _, _] => {} - | ^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/match-vec-fixed.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/match-vec-fixed.rs:11:9 - | -LL | [_, 1, _] => {} - | ^^^^^^^^^ - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/pattern/usefulness/match-vec-unreachable.rs b/src/test/ui/pattern/usefulness/match-vec-unreachable.rs deleted file mode 100644 index 3342389be..000000000 --- a/src/test/ui/pattern/usefulness/match-vec-unreachable.rs +++ /dev/null @@ -1,29 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - let x: Vec<(isize, isize)> = Vec::new(); - let x: &[(isize, isize)] = &x; - match *x { - [a, (2, 3), _] => (), - [(1, 2), (2, 3), b] => (), //~ ERROR unreachable pattern - _ => () - } - - let x: Vec<String> = vec!["foo".to_string(), - "bar".to_string(), - "baz".to_string()]; - let x: &[String] = &x; - match *x { - [ref a, _, _, ..] => { println!("{}", a); } - [_, _, _, _, _] => { } //~ ERROR unreachable pattern - _ => { } - } - - let x: Vec<char> = vec!['a', 'b', 'c']; - let x: &[char] = &x; - match *x { - ['a', 'b', 'c', ref _tail @ ..] => {} - ['a', 'b', 'c'] => {} //~ ERROR unreachable pattern - _ => {} - } -} diff --git a/src/test/ui/pattern/usefulness/match-vec-unreachable.stderr b/src/test/ui/pattern/usefulness/match-vec-unreachable.stderr deleted file mode 100644 index 672fd92fb..000000000 --- a/src/test/ui/pattern/usefulness/match-vec-unreachable.stderr +++ /dev/null @@ -1,26 +0,0 @@ -error: unreachable pattern - --> $DIR/match-vec-unreachable.rs:8:9 - | -LL | [(1, 2), (2, 3), b] => (), - | ^^^^^^^^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/match-vec-unreachable.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/match-vec-unreachable.rs:18:9 - | -LL | [_, _, _, _, _] => { } - | ^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/match-vec-unreachable.rs:26:9 - | -LL | ['a', 'b', 'c'] => {} - | ^^^^^^^^^^^^^^^ - -error: aborting due to 3 previous errors - diff --git a/src/test/ui/pattern/usefulness/nested-exhaustive-match.rs b/src/test/ui/pattern/usefulness/nested-exhaustive-match.rs deleted file mode 100644 index 8b2294f84..000000000 --- a/src/test/ui/pattern/usefulness/nested-exhaustive-match.rs +++ /dev/null @@ -1,14 +0,0 @@ -// run-pass -#![allow(dead_code)] -// pretty-expanded FIXME #23616 - -struct Foo { foo: bool, bar: Option<isize>, baz: isize } - -pub fn main() { - match (Foo{foo: true, bar: Some(10), baz: 20}) { - Foo{foo: true, bar: Some(_), ..} => {} - Foo{foo: false, bar: None, ..} => {} - Foo{foo: true, bar: None, ..} => {} - Foo{foo: false, bar: Some(_), ..} => {} - } -} diff --git a/src/test/ui/pattern/usefulness/non-exhaustive-defined-here.rs b/src/test/ui/pattern/usefulness/non-exhaustive-defined-here.rs deleted file mode 100644 index af42fc1ae..000000000 --- a/src/test/ui/pattern/usefulness/non-exhaustive-defined-here.rs +++ /dev/null @@ -1,105 +0,0 @@ -// Test the "defined here" and "not covered" diagnostic hints. -// We also make sure that references are peeled off from the scrutinee type -// so that the diagnostics work better with default binding modes. - -#[derive(Clone)] -enum E { - //~^ NOTE - //~| NOTE - //~| NOTE - //~| NOTE - //~| NOTE - //~| NOTE - A, - B, - //~^ NOTE `E` defined here - //~| NOTE `E` defined here - //~| NOTE `E` defined here - //~| NOTE `E` defined here - //~| NOTE `E` defined here - //~| NOTE `E` defined here - //~| NOTE not covered - //~| NOTE not covered - //~| NOTE not covered - //~| NOTE not covered - //~| NOTE not covered - //~| NOTE not covered - C - //~^ not covered - //~| not covered - //~| not covered - //~| not covered - //~| not covered - //~| not covered -} - -fn by_val(e: E) { - let e1 = e.clone(); - match e1 { //~ ERROR non-exhaustive patterns: `E::B` and `E::C` not covered - //~^ NOTE patterns `E::B` and `E::C` not covered - //~| NOTE the matched value is of type `E` - E::A => {} - } - - let E::A = e; //~ ERROR refutable pattern in local binding: `E::B` and `E::C` not covered - //~^ NOTE patterns `E::B` and `E::C` not covered - //~| NOTE `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with - //~| NOTE for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html - //~| NOTE the matched value is of type `E` -} - -fn by_ref_once(e: &E) { - match e { //~ ERROR non-exhaustive patterns: `&E::B` and `&E::C` not covered - //~^ NOTE patterns `&E::B` and `&E::C` not covered - //~| NOTE the matched value is of type `&E` - E::A => {} - } - - let E::A = e; //~ ERROR refutable pattern in local binding: `&E::B` and `&E::C` not covered - //~^ NOTE patterns `&E::B` and `&E::C` not covered - //~| NOTE `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with - //~| NOTE for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html - //~| NOTE the matched value is of type `&E` -} - -fn by_ref_thrice(e: & &mut &E) { - match e { //~ ERROR non-exhaustive patterns: `&&mut &E::B` and `&&mut &E::C` not covered - //~^ NOTE patterns `&&mut &E::B` and `&&mut &E::C` not covered - //~| NOTE the matched value is of type `&&mut &E` - E::A => {} - } - - let E::A = e; - //~^ ERROR refutable pattern in local binding: `&&mut &E::B` and `&&mut &E::C` not covered - //~| NOTE patterns `&&mut &E::B` and `&&mut &E::C` not covered - //~| NOTE `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with - //~| NOTE for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html - //~| NOTE the matched value is of type `&&mut &E` -} - -enum Opt { - //~^ NOTE - //~| NOTE - Some(u8), - None, - //~^ NOTE `Opt` defined here - //~| NOTE `Opt` defined here - //~| NOTE not covered - //~| NOTE not covered -} - -fn ref_pat(e: Opt) { - match e {//~ ERROR non-exhaustive patterns: `Opt::None` not covered - //~^ NOTE pattern `Opt::None` not covered - //~| NOTE the matched value is of type `Opt` - Opt::Some(ref _x) => {} - } - - let Opt::Some(ref _x) = e; //~ ERROR refutable pattern in local binding: `Opt::None` not covered - //~^ NOTE the matched value is of type `Opt` - //~| NOTE pattern `Opt::None` not covered - //~| NOTE `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with - //~| NOTE for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/non-exhaustive-defined-here.stderr b/src/test/ui/pattern/usefulness/non-exhaustive-defined-here.stderr deleted file mode 100644 index 678c9b2ab..000000000 --- a/src/test/ui/pattern/usefulness/non-exhaustive-defined-here.stderr +++ /dev/null @@ -1,198 +0,0 @@ -error[E0004]: non-exhaustive patterns: `E::B` and `E::C` not covered - --> $DIR/non-exhaustive-defined-here.rs:38:11 - | -LL | match e1 { - | ^^ patterns `E::B` and `E::C` not covered - | -note: `E` defined here - --> $DIR/non-exhaustive-defined-here.rs:14:5 - | -LL | enum E { - | - -... -LL | B, - | ^ not covered -... -LL | C - | ^ not covered - = note: the matched value is of type `E` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ E::A => {} -LL + E::B | E::C => todo!() - | - -error[E0005]: refutable pattern in local binding: `E::B` and `E::C` not covered - --> $DIR/non-exhaustive-defined-here.rs:44:9 - | -LL | let E::A = e; - | ^^^^ patterns `E::B` and `E::C` not covered - | - = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant - = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html -note: `E` defined here - --> $DIR/non-exhaustive-defined-here.rs:14:5 - | -LL | enum E { - | - -... -LL | B, - | ^ not covered -... -LL | C - | ^ not covered - = note: the matched value is of type `E` -help: you might want to use `if let` to ignore the variants that aren't matched - | -LL | if let E::A = e { todo!() } - | ++ ~~~~~~~~~~~ - -error[E0004]: non-exhaustive patterns: `&E::B` and `&E::C` not covered - --> $DIR/non-exhaustive-defined-here.rs:52:11 - | -LL | match e { - | ^ patterns `&E::B` and `&E::C` not covered - | -note: `E` defined here - --> $DIR/non-exhaustive-defined-here.rs:14:5 - | -LL | enum E { - | - -... -LL | B, - | ^ not covered -... -LL | C - | ^ not covered - = note: the matched value is of type `&E` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ E::A => {} -LL + &E::B | &E::C => todo!() - | - -error[E0005]: refutable pattern in local binding: `&E::B` and `&E::C` not covered - --> $DIR/non-exhaustive-defined-here.rs:58:9 - | -LL | let E::A = e; - | ^^^^ patterns `&E::B` and `&E::C` not covered - | - = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant - = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html -note: `E` defined here - --> $DIR/non-exhaustive-defined-here.rs:14:5 - | -LL | enum E { - | - -... -LL | B, - | ^ not covered -... -LL | C - | ^ not covered - = note: the matched value is of type `&E` -help: you might want to use `if let` to ignore the variants that aren't matched - | -LL | if let E::A = e { todo!() } - | ++ ~~~~~~~~~~~ - -error[E0004]: non-exhaustive patterns: `&&mut &E::B` and `&&mut &E::C` not covered - --> $DIR/non-exhaustive-defined-here.rs:66:11 - | -LL | match e { - | ^ patterns `&&mut &E::B` and `&&mut &E::C` not covered - | -note: `E` defined here - --> $DIR/non-exhaustive-defined-here.rs:14:5 - | -LL | enum E { - | - -... -LL | B, - | ^ not covered -... -LL | C - | ^ not covered - = note: the matched value is of type `&&mut &E` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ E::A => {} -LL + &&mut &E::B | &&mut &E::C => todo!() - | - -error[E0005]: refutable pattern in local binding: `&&mut &E::B` and `&&mut &E::C` not covered - --> $DIR/non-exhaustive-defined-here.rs:72:9 - | -LL | let E::A = e; - | ^^^^ patterns `&&mut &E::B` and `&&mut &E::C` not covered - | - = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant - = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html -note: `E` defined here - --> $DIR/non-exhaustive-defined-here.rs:14:5 - | -LL | enum E { - | - -... -LL | B, - | ^ not covered -... -LL | C - | ^ not covered - = note: the matched value is of type `&&mut &E` -help: you might want to use `if let` to ignore the variants that aren't matched - | -LL | if let E::A = e { todo!() } - | ++ ~~~~~~~~~~~ - -error[E0004]: non-exhaustive patterns: `Opt::None` not covered - --> $DIR/non-exhaustive-defined-here.rs:92:11 - | -LL | match e { - | ^ pattern `Opt::None` not covered - | -note: `Opt` defined here - --> $DIR/non-exhaustive-defined-here.rs:84:5 - | -LL | enum Opt { - | --- -... -LL | None, - | ^^^^ not covered - = note: the matched value is of type `Opt` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ Opt::Some(ref _x) => {} -LL + Opt::None => todo!() - | - -error[E0005]: refutable pattern in local binding: `Opt::None` not covered - --> $DIR/non-exhaustive-defined-here.rs:98:9 - | -LL | let Opt::Some(ref _x) = e; - | ^^^^^^^^^^^^^^^^^ pattern `Opt::None` not covered - | - = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant - = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html -note: `Opt` defined here - --> $DIR/non-exhaustive-defined-here.rs:84:5 - | -LL | enum Opt { - | --- -... -LL | None, - | ^^^^ not covered - = note: the matched value is of type `Opt` -help: you might want to use `if let` to ignore the variant that isn't matched - | -LL | let _x = if let Opt::Some(ref _x) = e { _x } else { todo!() }; - | +++++++++++ +++++++++++++++++++++++ -help: alternatively, you might want to use let else to handle the variant that isn't matched - | -LL | let Opt::Some(ref _x) = e else { todo!() }; - | ++++++++++++++++ - -error: aborting due to 8 previous errors - -Some errors have detailed explanations: E0004, E0005. -For more information about an error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/non-exhaustive-match-nested.rs b/src/test/ui/pattern/usefulness/non-exhaustive-match-nested.rs deleted file mode 100644 index 69c3c7658..000000000 --- a/src/test/ui/pattern/usefulness/non-exhaustive-match-nested.rs +++ /dev/null @@ -1,19 +0,0 @@ -enum T { A(U), B } -enum U { C, D } - -fn match_nested_vecs<'a, T>(l1: Option<&'a [T]>, l2: Result<&'a [T], ()>) -> &'static str { - match (l1, l2) { //~ ERROR non-exhaustive patterns: `(Some(&[]), Err(_))` not covered - (Some(&[]), Ok(&[])) => "Some(empty), Ok(empty)", - (Some(&[_, ..]), Ok(_)) | (Some(&[_, ..]), Err(())) => "Some(non-empty), any", - (None, Ok(&[])) | (None, Err(())) | (None, Ok(&[_])) => "None, Ok(less than one element)", - (None, Ok(&[_, _, ..])) => "None, Ok(at least two elements)" - } -} - -fn main() { - let x = T::A(U::C); - match x { //~ ERROR non-exhaustive patterns: `T::A(U::C)` not covered - T::A(U::D) => { panic!("hello"); } - T::B => { panic!("goodbye"); } - } -} diff --git a/src/test/ui/pattern/usefulness/non-exhaustive-match-nested.stderr b/src/test/ui/pattern/usefulness/non-exhaustive-match-nested.stderr deleted file mode 100644 index 44f327421..000000000 --- a/src/test/ui/pattern/usefulness/non-exhaustive-match-nested.stderr +++ /dev/null @@ -1,34 +0,0 @@ -error[E0004]: non-exhaustive patterns: `(Some(&[]), Err(_))` not covered - --> $DIR/non-exhaustive-match-nested.rs:5:11 - | -LL | match (l1, l2) { - | ^^^^^^^^ pattern `(Some(&[]), Err(_))` not covered - | - = note: the matched value is of type `(Option<&[T]>, Result<&[T], ()>)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ (None, Ok(&[_, _, ..])) => "None, Ok(at least two elements)", -LL + (Some(&[]), Err(_)) => todo!() - | - -error[E0004]: non-exhaustive patterns: `T::A(U::C)` not covered - --> $DIR/non-exhaustive-match-nested.rs:15:11 - | -LL | match x { - | ^ pattern `T::A(U::C)` not covered - | -note: `T` defined here - --> $DIR/non-exhaustive-match-nested.rs:1:10 - | -LL | enum T { A(U), B } - | - ^ not covered - = note: the matched value is of type `T` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ T::B => { panic!("goodbye"); } -LL + T::A(U::C) => todo!() - | - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/non-exhaustive-match.rs b/src/test/ui/pattern/usefulness/non-exhaustive-match.rs deleted file mode 100644 index 1cb58b8ce..000000000 --- a/src/test/ui/pattern/usefulness/non-exhaustive-match.rs +++ /dev/null @@ -1,63 +0,0 @@ -#![allow(illegal_floating_point_literal_pattern)] - -enum T { A, B } - -fn main() { - let x = T::A; - match x { T::B => { } } //~ ERROR non-exhaustive patterns: `T::A` not covered - match true { //~ ERROR non-exhaustive patterns: `false` not covered - true => {} - } - match Some(10) { //~ ERROR non-exhaustive patterns: `Some(_)` not covered - None => {} - } - match (2, 3, 4) { //~ ERROR non-exhaustive patterns: `(_, _, i32::MIN..=3_i32)` - // and `(_, _, 5_i32..=i32::MAX)` not covered - (_, _, 4) => {} - } - match (T::A, T::A) { //~ ERROR non-exhaustive patterns: `(T::A, T::A)` and `(T::B, T::B)` not covered - (T::A, T::B) => {} - (T::B, T::A) => {} - } - match T::A { //~ ERROR non-exhaustive patterns: `T::B` not covered - T::A => {} - } - // This is exhaustive, though the algorithm got it wrong at one point - match (T::A, T::B) { - (T::A, _) => {} - (_, T::A) => {} - (T::B, T::B) => {} - } - let vec = vec![Some(42), None, Some(21)]; - let vec: &[Option<isize>] = &vec; - match *vec { //~ ERROR non-exhaustive patterns: `[]` not covered - [Some(..), None, ref tail @ ..] => {} - [Some(..), Some(..), ref tail @ ..] => {} - [None] => {} - } - let vec = vec![1]; - let vec: &[isize] = &vec; - match *vec { - [_, ref tail @ ..] => (), - [] => () - } - let vec = vec![0.5f32]; - let vec: &[f32] = &vec; - match *vec { //~ ERROR non-exhaustive patterns: `[_, _, _, _, ..]` not covered - [0.1, 0.2, 0.3] => (), - [0.1, 0.2] => (), - [0.1] => (), - [] => () - } - let vec = vec![Some(42), None, Some(21)]; - let vec: &[Option<isize>] = &vec; - match *vec { - [Some(..), None, ref tail @ ..] => {} - [Some(..), Some(..), ref tail @ ..] => {} - [None, None, ref tail @ ..] => {} - [None, Some(..), ref tail @ ..] => {} - [Some(_)] => {} - [None] => {} - [] => {} - } -} diff --git a/src/test/ui/pattern/usefulness/non-exhaustive-match.stderr b/src/test/ui/pattern/usefulness/non-exhaustive-match.stderr deleted file mode 100644 index 4234600d0..000000000 --- a/src/test/ui/pattern/usefulness/non-exhaustive-match.stderr +++ /dev/null @@ -1,124 +0,0 @@ -error[E0004]: non-exhaustive patterns: `T::A` not covered - --> $DIR/non-exhaustive-match.rs:7:11 - | -LL | match x { T::B => { } } - | ^ pattern `T::A` not covered - | -note: `T` defined here - --> $DIR/non-exhaustive-match.rs:3:10 - | -LL | enum T { A, B } - | - ^ not covered - = note: the matched value is of type `T` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL | match x { T::B => { }, T::A => todo!() } - | +++++++++++++++++ - -error[E0004]: non-exhaustive patterns: `false` not covered - --> $DIR/non-exhaustive-match.rs:8:11 - | -LL | match true { - | ^^^^ pattern `false` not covered - | - = note: the matched value is of type `bool` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ true => {} -LL + false => todo!() - | - -error[E0004]: non-exhaustive patterns: `Some(_)` not covered - --> $DIR/non-exhaustive-match.rs:11:11 - | -LL | match Some(10) { - | ^^^^^^^^ pattern `Some(_)` not covered - | -note: `Option<i32>` defined here - --> $SRC_DIR/core/src/option.rs:LL:COL - | -LL | pub enum Option<T> { - | ------------------ -... -LL | Some(#[stable(feature = "rust1", since = "1.0.0")] T), - | ^^^^ not covered - = note: the matched value is of type `Option<i32>` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ None => {} -LL + Some(_) => todo!() - | - -error[E0004]: non-exhaustive patterns: `(_, _, i32::MIN..=3_i32)` and `(_, _, 5_i32..=i32::MAX)` not covered - --> $DIR/non-exhaustive-match.rs:14:11 - | -LL | match (2, 3, 4) { - | ^^^^^^^^^ patterns `(_, _, i32::MIN..=3_i32)` and `(_, _, 5_i32..=i32::MAX)` not covered - | - = note: the matched value is of type `(i32, i32, i32)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ (_, _, 4) => {} -LL + (_, _, i32::MIN..=3_i32) | (_, _, 5_i32..=i32::MAX) => todo!() - | - -error[E0004]: non-exhaustive patterns: `(T::A, T::A)` and `(T::B, T::B)` not covered - --> $DIR/non-exhaustive-match.rs:18:11 - | -LL | match (T::A, T::A) { - | ^^^^^^^^^^^^ patterns `(T::A, T::A)` and `(T::B, T::B)` not covered - | - = note: the matched value is of type `(T, T)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ (T::B, T::A) => {} -LL + (T::A, T::A) | (T::B, T::B) => todo!() - | - -error[E0004]: non-exhaustive patterns: `T::B` not covered - --> $DIR/non-exhaustive-match.rs:22:11 - | -LL | match T::A { - | ^^^^ pattern `T::B` not covered - | -note: `T` defined here - --> $DIR/non-exhaustive-match.rs:3:13 - | -LL | enum T { A, B } - | - ^ not covered - = note: the matched value is of type `T` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ T::A => {} -LL + T::B => todo!() - | - -error[E0004]: non-exhaustive patterns: `[]` not covered - --> $DIR/non-exhaustive-match.rs:33:11 - | -LL | match *vec { - | ^^^^ pattern `[]` not covered - | - = note: the matched value is of type `[Option<isize>]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [None] => {} -LL + [] => todo!() - | - -error[E0004]: non-exhaustive patterns: `[_, _, _, _, ..]` not covered - --> $DIR/non-exhaustive-match.rs:46:11 - | -LL | match *vec { - | ^^^^ pattern `[_, _, _, _, ..]` not covered - | - = note: the matched value is of type `[f32]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [] => (), -LL + [_, _, _, _, ..] => todo!() - | - -error: aborting due to 8 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/non-exhaustive-pattern-witness.rs b/src/test/ui/pattern/usefulness/non-exhaustive-pattern-witness.rs deleted file mode 100644 index 4bd344219..000000000 --- a/src/test/ui/pattern/usefulness/non-exhaustive-pattern-witness.rs +++ /dev/null @@ -1,89 +0,0 @@ -struct Foo { - first: bool, - second: Option<[usize; 4]> -} - -fn struct_with_a_nested_enum_and_vector() { - match (Foo { first: true, second: None }) { -//~^ ERROR non-exhaustive patterns: `Foo { first: false, second: Some([_, _, _, _]) }` not covered - Foo { first: true, second: None } => (), - Foo { first: true, second: Some(_) } => (), - Foo { first: false, second: None } => (), - Foo { first: false, second: Some([1, 2, 3, 4]) } => () - } -} - -enum Color { - Red, - Green, - CustomRGBA { a: bool, r: u8, g: u8, b: u8 } -} - -fn enum_with_single_missing_variant() { - match Color::Red { - //~^ ERROR non-exhaustive patterns: `Color::Red` not covered - Color::CustomRGBA { .. } => (), - Color::Green => () - } -} - -enum Direction { - North, East, South, West -} - -fn enum_with_multiple_missing_variants() { - match Direction::North { - //~^ ERROR non-exhaustive patterns: `Direction::East`, `Direction::South` and `Direction::West` not covered - Direction::North => () - } -} - -enum ExcessiveEnum { - First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Ninth, Tenth, Eleventh, Twelfth -} - -fn enum_with_excessive_missing_variants() { - match ExcessiveEnum::First { - //~^ ERROR `ExcessiveEnum::Second`, `ExcessiveEnum::Third`, `ExcessiveEnum::Fourth` and 8 more not covered - - ExcessiveEnum::First => () - } -} - -fn enum_struct_variant() { - match Color::Red { - //~^ ERROR non-exhaustive patterns: `Color::CustomRGBA { a: true, .. }` not covered - Color::Red => (), - Color::Green => (), - Color::CustomRGBA { a: false, r: _, g: _, b: 0 } => (), - Color::CustomRGBA { a: false, r: _, g: _, b: _ } => () - } -} - -enum Enum { - First, - Second(bool) -} - -fn vectors_with_nested_enums() { - let x: &'static [Enum] = &[Enum::First, Enum::Second(false)]; - match *x { - //~^ ERROR non-exhaustive patterns: `[Enum::Second(true), Enum::Second(false)]` not covered - [] => (), - [_] => (), - [Enum::First, _] => (), - [Enum::Second(true), Enum::First] => (), - [Enum::Second(true), Enum::Second(true)] => (), - [Enum::Second(false), _] => (), - [_, _, ref tail @ .., _] => () - } -} - -fn missing_nil() { - match ((), false) { - //~^ ERROR non-exhaustive patterns: `((), false)` not covered - ((), true) => () - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/non-exhaustive-pattern-witness.stderr b/src/test/ui/pattern/usefulness/non-exhaustive-pattern-witness.stderr deleted file mode 100644 index b8af566de..000000000 --- a/src/test/ui/pattern/usefulness/non-exhaustive-pattern-witness.stderr +++ /dev/null @@ -1,129 +0,0 @@ -error[E0004]: non-exhaustive patterns: `Foo { first: false, second: Some([_, _, _, _]) }` not covered - --> $DIR/non-exhaustive-pattern-witness.rs:7:11 - | -LL | match (Foo { first: true, second: None }) { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `Foo { first: false, second: Some([_, _, _, _]) }` not covered - | -note: `Foo` defined here - --> $DIR/non-exhaustive-pattern-witness.rs:1:8 - | -LL | struct Foo { - | ^^^ - = note: the matched value is of type `Foo` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ Foo { first: false, second: Some([1, 2, 3, 4]) } => (), -LL + Foo { first: false, second: Some([_, _, _, _]) } => todo!() - | - -error[E0004]: non-exhaustive patterns: `Color::Red` not covered - --> $DIR/non-exhaustive-pattern-witness.rs:23:11 - | -LL | match Color::Red { - | ^^^^^^^^^^ pattern `Color::Red` not covered - | -note: `Color` defined here - --> $DIR/non-exhaustive-pattern-witness.rs:17:5 - | -LL | enum Color { - | ----- -LL | Red, - | ^^^ not covered - = note: the matched value is of type `Color` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ Color::Green => (), -LL + Color::Red => todo!() - | - -error[E0004]: non-exhaustive patterns: `Direction::East`, `Direction::South` and `Direction::West` not covered - --> $DIR/non-exhaustive-pattern-witness.rs:35:11 - | -LL | match Direction::North { - | ^^^^^^^^^^^^^^^^ patterns `Direction::East`, `Direction::South` and `Direction::West` not covered - | -note: `Direction` defined here - --> $DIR/non-exhaustive-pattern-witness.rs:31:12 - | -LL | enum Direction { - | --------- -LL | North, East, South, West - | ^^^^ ^^^^^ ^^^^ not covered - | | | - | | not covered - | not covered - = note: the matched value is of type `Direction` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ Direction::North => (), -LL + Direction::East | Direction::South | Direction::West => todo!() - | - -error[E0004]: non-exhaustive patterns: `ExcessiveEnum::Second`, `ExcessiveEnum::Third`, `ExcessiveEnum::Fourth` and 8 more not covered - --> $DIR/non-exhaustive-pattern-witness.rs:46:11 - | -LL | match ExcessiveEnum::First { - | ^^^^^^^^^^^^^^^^^^^^ patterns `ExcessiveEnum::Second`, `ExcessiveEnum::Third`, `ExcessiveEnum::Fourth` and 8 more not covered - | -note: `ExcessiveEnum` defined here - --> $DIR/non-exhaustive-pattern-witness.rs:41:6 - | -LL | enum ExcessiveEnum { - | ^^^^^^^^^^^^^ - = note: the matched value is of type `ExcessiveEnum` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ ExcessiveEnum::First => (), -LL + _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `Color::CustomRGBA { a: true, .. }` not covered - --> $DIR/non-exhaustive-pattern-witness.rs:54:11 - | -LL | match Color::Red { - | ^^^^^^^^^^ pattern `Color::CustomRGBA { a: true, .. }` not covered - | -note: `Color` defined here - --> $DIR/non-exhaustive-pattern-witness.rs:19:5 - | -LL | enum Color { - | ----- -... -LL | CustomRGBA { a: bool, r: u8, g: u8, b: u8 } - | ^^^^^^^^^^ not covered - = note: the matched value is of type `Color` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ Color::CustomRGBA { a: false, r: _, g: _, b: _ } => (), -LL + Color::CustomRGBA { a: true, .. } => todo!() - | - -error[E0004]: non-exhaustive patterns: `[Enum::Second(true), Enum::Second(false)]` not covered - --> $DIR/non-exhaustive-pattern-witness.rs:70:11 - | -LL | match *x { - | ^^ pattern `[Enum::Second(true), Enum::Second(false)]` not covered - | - = note: the matched value is of type `[Enum]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [_, _, ref tail @ .., _] => (), -LL + [Enum::Second(true), Enum::Second(false)] => todo!() - | - -error[E0004]: non-exhaustive patterns: `((), false)` not covered - --> $DIR/non-exhaustive-pattern-witness.rs:83:11 - | -LL | match ((), false) { - | ^^^^^^^^^^^ pattern `((), false)` not covered - | - = note: the matched value is of type `((), bool)` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ ((), true) => (), -LL + ((), false) => todo!() - | - -error: aborting due to 7 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/refutable-pattern-errors.rs b/src/test/ui/pattern/usefulness/refutable-pattern-errors.rs deleted file mode 100644 index 7c9aa51e7..000000000 --- a/src/test/ui/pattern/usefulness/refutable-pattern-errors.rs +++ /dev/null @@ -1,7 +0,0 @@ -fn func((1, (Some(1), 2..=3)): (isize, (Option<isize>, isize))) { } -//~^ ERROR refutable pattern in function argument: `(_, _)` not covered - -fn main() { - let (1, (Some(1), 2..=3)) = (1, (None, 2)); - //~^ ERROR refutable pattern in local binding: `(i32::MIN..=0_i32, _)` and `(2_i32..=i32::MAX, _)` not covered -} diff --git a/src/test/ui/pattern/usefulness/refutable-pattern-errors.stderr b/src/test/ui/pattern/usefulness/refutable-pattern-errors.stderr deleted file mode 100644 index d1dacc822..000000000 --- a/src/test/ui/pattern/usefulness/refutable-pattern-errors.stderr +++ /dev/null @@ -1,25 +0,0 @@ -error[E0005]: refutable pattern in function argument: `(_, _)` not covered - --> $DIR/refutable-pattern-errors.rs:1:9 - | -LL | fn func((1, (Some(1), 2..=3)): (isize, (Option<isize>, isize))) { } - | ^^^^^^^^^^^^^^^^^^^^^ pattern `(_, _)` not covered - | - = note: the matched value is of type `(isize, (Option<isize>, isize))` - -error[E0005]: refutable pattern in local binding: `(i32::MIN..=0_i32, _)` and `(2_i32..=i32::MAX, _)` not covered - --> $DIR/refutable-pattern-errors.rs:5:9 - | -LL | let (1, (Some(1), 2..=3)) = (1, (None, 2)); - | ^^^^^^^^^^^^^^^^^^^^^ patterns `(i32::MIN..=0_i32, _)` and `(2_i32..=i32::MAX, _)` not covered - | - = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant - = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html - = note: the matched value is of type `(i32, (Option<i32>, i32))` -help: you might want to use `if let` to ignore the variants that aren't matched - | -LL | if let (1, (Some(1), 2..=3)) = (1, (None, 2)) { todo!() } - | ++ ~~~~~~~~~~~ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0005`. diff --git a/src/test/ui/pattern/usefulness/refutable-pattern-in-fn-arg.rs b/src/test/ui/pattern/usefulness/refutable-pattern-in-fn-arg.rs deleted file mode 100644 index a2d9e1935..000000000 --- a/src/test/ui/pattern/usefulness/refutable-pattern-in-fn-arg.rs +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let f = |3: isize| println!("hello"); - //~^ ERROR refutable pattern in function argument: `_` not covered - f(4); -} diff --git a/src/test/ui/pattern/usefulness/refutable-pattern-in-fn-arg.stderr b/src/test/ui/pattern/usefulness/refutable-pattern-in-fn-arg.stderr deleted file mode 100644 index c9d8cf43f..000000000 --- a/src/test/ui/pattern/usefulness/refutable-pattern-in-fn-arg.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0005]: refutable pattern in function argument: `_` not covered - --> $DIR/refutable-pattern-in-fn-arg.rs:2:14 - | -LL | let f = |3: isize| println!("hello"); - | ^ pattern `_` not covered - | - = note: the matched value is of type `isize` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0005`. diff --git a/src/test/ui/pattern/usefulness/slice-pattern-const-2.rs b/src/test/ui/pattern/usefulness/slice-pattern-const-2.rs deleted file mode 100644 index 4bf8d0fd2..000000000 --- a/src/test/ui/pattern/usefulness/slice-pattern-const-2.rs +++ /dev/null @@ -1,31 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - let s = &[0x00; 4][..]; //Slice of any value - const MAGIC_TEST: &[u32] = &[4, 5, 6, 7]; //Const slice to pattern match with - match s { - MAGIC_TEST => (), - [0x00, 0x00, 0x00, 0x00] => (), - [4, 5, 6, 7] => (), //~ ERROR unreachable pattern - _ => (), - } - match s { - [0x00, 0x00, 0x00, 0x00] => (), - MAGIC_TEST => (), - [4, 5, 6, 7] => (), //~ ERROR unreachable pattern - _ => (), - } - match s { - [0x00, 0x00, 0x00, 0x00] => (), - [4, 5, 6, 7] => (), - MAGIC_TEST => (), //~ ERROR unreachable pattern - _ => (), - } - const FOO: [u32; 1] = [4]; - match [99] { - [0x00] => (), - [4] => (), - FOO => (), //~ ERROR unreachable pattern - _ => (), - } -} diff --git a/src/test/ui/pattern/usefulness/slice-pattern-const-2.stderr b/src/test/ui/pattern/usefulness/slice-pattern-const-2.stderr deleted file mode 100644 index dcad11a38..000000000 --- a/src/test/ui/pattern/usefulness/slice-pattern-const-2.stderr +++ /dev/null @@ -1,32 +0,0 @@ -error: unreachable pattern - --> $DIR/slice-pattern-const-2.rs:9:9 - | -LL | [4, 5, 6, 7] => (), - | ^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/slice-pattern-const-2.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const-2.rs:15:9 - | -LL | [4, 5, 6, 7] => (), - | ^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const-2.rs:21:9 - | -LL | MAGIC_TEST => (), - | ^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const-2.rs:28:9 - | -LL | FOO => (), - | ^^^ - -error: aborting due to 4 previous errors - diff --git a/src/test/ui/pattern/usefulness/slice-pattern-const-3.rs b/src/test/ui/pattern/usefulness/slice-pattern-const-3.rs deleted file mode 100644 index 2ca8323f0..000000000 --- a/src/test/ui/pattern/usefulness/slice-pattern-const-3.rs +++ /dev/null @@ -1,31 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - let s = &["0x00"; 4][..]; //Slice of any value - const MAGIC_TEST: &[&str] = &["4", "5", "6", "7"]; //Const slice to pattern match with - match s { - MAGIC_TEST => (), - ["0x00", "0x00", "0x00", "0x00"] => (), - ["4", "5", "6", "7"] => (), //~ ERROR unreachable pattern - _ => (), - } - match s { - ["0x00", "0x00", "0x00", "0x00"] => (), - MAGIC_TEST => (), - ["4", "5", "6", "7"] => (), //~ ERROR unreachable pattern - _ => (), - } - match s { - ["0x00", "0x00", "0x00", "0x00"] => (), - ["4", "5", "6", "7"] => (), - MAGIC_TEST => (), //~ ERROR unreachable pattern - _ => (), - } - const FOO: [&str; 1] = ["boo"]; - match ["baa"] { - ["0x00"] => (), - ["boo"] => (), - FOO => (), //~ ERROR unreachable pattern - _ => (), - } -} diff --git a/src/test/ui/pattern/usefulness/slice-pattern-const-3.stderr b/src/test/ui/pattern/usefulness/slice-pattern-const-3.stderr deleted file mode 100644 index b90b3a88a..000000000 --- a/src/test/ui/pattern/usefulness/slice-pattern-const-3.stderr +++ /dev/null @@ -1,32 +0,0 @@ -error: unreachable pattern - --> $DIR/slice-pattern-const-3.rs:9:9 - | -LL | ["4", "5", "6", "7"] => (), - | ^^^^^^^^^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/slice-pattern-const-3.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const-3.rs:15:9 - | -LL | ["4", "5", "6", "7"] => (), - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const-3.rs:21:9 - | -LL | MAGIC_TEST => (), - | ^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const-3.rs:28:9 - | -LL | FOO => (), - | ^^^ - -error: aborting due to 4 previous errors - diff --git a/src/test/ui/pattern/usefulness/slice-pattern-const.rs b/src/test/ui/pattern/usefulness/slice-pattern-const.rs deleted file mode 100644 index 89195d5b1..000000000 --- a/src/test/ui/pattern/usefulness/slice-pattern-const.rs +++ /dev/null @@ -1,54 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - let s = &[0x00; 4][..]; //Slice of any value - const MAGIC_TEST: &[u8] = b"TEST"; //Const slice to pattern match with - match s { - MAGIC_TEST => (), - [0x00, 0x00, 0x00, 0x00] => (), - [84, 69, 83, 84] => (), //~ ERROR unreachable pattern - _ => (), - } - match s { - [0x00, 0x00, 0x00, 0x00] => (), - MAGIC_TEST => (), - [84, 69, 83, 84] => (), //~ ERROR unreachable pattern - _ => (), - } - match s { - [0x00, 0x00, 0x00, 0x00] => (), - [84, 69, 83, 84] => (), - MAGIC_TEST => (), //~ ERROR unreachable pattern - _ => (), - } - const FOO: [u8; 1] = [4]; - match [99] { - [0x00] => (), - [4] => (), - FOO => (), //~ ERROR unreachable pattern - _ => (), - } - const BAR: &[u8; 1] = &[4]; - match &[99] { - [0x00] => (), - [4] => (), - BAR => (), //~ ERROR unreachable pattern - b"a" => (), - _ => (), - } - - const BOO: &[u8; 0] = &[]; - match &[] { - [] => (), - BOO => (), //~ ERROR unreachable pattern - b"" => (), //~ ERROR unreachable pattern - _ => (), //~ ERROR unreachable pattern - } - - const CONST1: &[bool; 1] = &[true]; - match &[false] { - CONST1 => {} - [true] => {} //~ ERROR unreachable pattern - [false] => {} - } -} diff --git a/src/test/ui/pattern/usefulness/slice-pattern-const.stderr b/src/test/ui/pattern/usefulness/slice-pattern-const.stderr deleted file mode 100644 index 1fffb9fed..000000000 --- a/src/test/ui/pattern/usefulness/slice-pattern-const.stderr +++ /dev/null @@ -1,62 +0,0 @@ -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:9:9 - | -LL | [84, 69, 83, 84] => (), - | ^^^^^^^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/slice-pattern-const.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:15:9 - | -LL | [84, 69, 83, 84] => (), - | ^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:21:9 - | -LL | MAGIC_TEST => (), - | ^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:28:9 - | -LL | FOO => (), - | ^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:35:9 - | -LL | BAR => (), - | ^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:43:9 - | -LL | BOO => (), - | ^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:44:9 - | -LL | b"" => (), - | ^^^ - -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:45:9 - | -LL | _ => (), - | ^ - -error: unreachable pattern - --> $DIR/slice-pattern-const.rs:51:9 - | -LL | [true] => {} - | ^^^^^^ - -error: aborting due to 9 previous errors - diff --git a/src/test/ui/pattern/usefulness/slice-patterns-exhaustiveness.rs b/src/test/ui/pattern/usefulness/slice-patterns-exhaustiveness.rs deleted file mode 100644 index 46e0da5be..000000000 --- a/src/test/ui/pattern/usefulness/slice-patterns-exhaustiveness.rs +++ /dev/null @@ -1,129 +0,0 @@ -fn main() { - let s: &[bool] = &[true; 0]; - let s1: &[bool; 1] = &[false; 1]; - let s2: &[bool; 2] = &[false; 2]; - let s3: &[bool; 3] = &[false; 3]; - let s10: &[bool; 10] = &[false; 10]; - - match s2 { - //~^ ERROR `&[false, _]` not covered - [true, .., true] => {} - } - match s3 { - //~^ ERROR `&[false, ..]` not covered - [true, .., true] => {} - } - match s10 { - //~^ ERROR `&[false, ..]` not covered - [true, .., true] => {} - } - - match s1 { - [true, ..] => {} - [.., false] => {} - } - match s2 { - //~^ ERROR `&[false, true]` not covered - [true, ..] => {} - [.., false] => {} - } - match s3 { - //~^ ERROR `&[false, .., true]` not covered - [true, ..] => {} - [.., false] => {} - } - match s { - //~^ ERROR `&[false, .., true]` not covered - [] => {} - [true, ..] => {} - [.., false] => {} - } - - match s { - //~^ ERROR `&[_, ..]` not covered - [] => {} - } - match s { - //~^ ERROR `&[_, _, ..]` not covered - [] => {} - [_] => {} - } - match s { - //~^ ERROR `&[false, ..]` not covered - [] => {} - [true, ..] => {} - } - match s { - //~^ ERROR `&[false, _, ..]` not covered - [] => {} - [_] => {} - [true, ..] => {} - } - match s { - //~^ ERROR `&[_, .., false]` not covered - [] => {} - [_] => {} - [.., true] => {} - } - - match s { - //~^ ERROR `&[_, _, .., true]` not covered - [] => {} - [_] => {} - [_, _] => {} - [.., false] => {} - } - match s { - //~^ ERROR `&[true, _, .., _]` not covered - [] => {} - [_] => {} - [_, _] => {} - [false, .., false] => {} - } - - const CONST: &[bool] = &[true]; - match s { - //~^ ERROR `&[]` and `&[_, _, ..]` not covered - &[true] => {} - } - match s { - //~^ ERROR `&[]` and `&[_, _, ..]` not covered - CONST => {} - } - match s { - //~^ ERROR `&[]` and `&[_, _, ..]` not covered - CONST => {} - &[false] => {} - } - match s { - //~^ ERROR `&[]` and `&[_, _, ..]` not covered - &[false] => {} - CONST => {} - } - match s { - //~^ ERROR `&[_, _, ..]` not covered - &[] => {} - CONST => {} - } - match s { - //~^ ERROR `&[false]` not covered - &[] => {} - CONST => {} - &[_, _, ..] => {} - } - match s { - [] => {} - [false] => {} - CONST => {} - [_, _, ..] => {} - } - const CONST1: &[bool; 1] = &[true]; - match s1 { - //~^ ERROR `&[false]` not covered - CONST1 => {} - } - match s1 { - CONST1 => {} - [false] => {} - } -} diff --git a/src/test/ui/pattern/usefulness/slice-patterns-exhaustiveness.stderr b/src/test/ui/pattern/usefulness/slice-patterns-exhaustiveness.stderr deleted file mode 100644 index 5d1e170ae..000000000 --- a/src/test/ui/pattern/usefulness/slice-patterns-exhaustiveness.stderr +++ /dev/null @@ -1,263 +0,0 @@ -error[E0004]: non-exhaustive patterns: `&[false, _]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:8:11 - | -LL | match s2 { - | ^^ pattern `&[false, _]` not covered - | - = note: the matched value is of type `&[bool; 2]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [true, .., true] => {} -LL + &[false, _] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:12:11 - | -LL | match s3 { - | ^^ pattern `&[false, ..]` not covered - | - = note: the matched value is of type `&[bool; 3]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [true, .., true] => {} -LL + &[false, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:16:11 - | -LL | match s10 { - | ^^^ pattern `&[false, ..]` not covered - | - = note: the matched value is of type `&[bool; 10]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [true, .., true] => {} -LL + &[false, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false, true]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:25:11 - | -LL | match s2 { - | ^^ pattern `&[false, true]` not covered - | - = note: the matched value is of type `&[bool; 2]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [.., false] => {} -LL + &[false, true] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false, .., true]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:30:11 - | -LL | match s3 { - | ^^ pattern `&[false, .., true]` not covered - | - = note: the matched value is of type `&[bool; 3]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [.., false] => {} -LL + &[false, .., true] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false, .., true]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:35:11 - | -LL | match s { - | ^ pattern `&[false, .., true]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [.., false] => {} -LL + &[false, .., true] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[_, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:42:11 - | -LL | match s { - | ^ pattern `&[_, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [] => {} -LL + &[_, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[_, _, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:46:11 - | -LL | match s { - | ^ pattern `&[_, _, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [_] => {} -LL + &[_, _, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:51:11 - | -LL | match s { - | ^ pattern `&[false, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [true, ..] => {} -LL + &[false, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false, _, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:56:11 - | -LL | match s { - | ^ pattern `&[false, _, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [true, ..] => {} -LL + &[false, _, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[_, .., false]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:62:11 - | -LL | match s { - | ^ pattern `&[_, .., false]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [.., true] => {} -LL + &[_, .., false] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[_, _, .., true]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:69:11 - | -LL | match s { - | ^ pattern `&[_, _, .., true]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [.., false] => {} -LL + &[_, _, .., true] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[true, _, .., _]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:76:11 - | -LL | match s { - | ^ pattern `&[true, _, .., _]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ [false, .., false] => {} -LL + &[true, _, .., _] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[]` and `&[_, _, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:85:11 - | -LL | match s { - | ^ patterns `&[]` and `&[_, _, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ &[true] => {} -LL + &[] | &[_, _, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[]` and `&[_, _, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:89:11 - | -LL | match s { - | ^ patterns `&[]` and `&[_, _, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ CONST => {} -LL + &[] | &[_, _, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[]` and `&[_, _, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:93:11 - | -LL | match s { - | ^ patterns `&[]` and `&[_, _, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ &[false] => {} -LL + &[] | &[_, _, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[]` and `&[_, _, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:98:11 - | -LL | match s { - | ^ patterns `&[]` and `&[_, _, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ CONST => {} -LL + &[] | &[_, _, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[_, _, ..]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:103:11 - | -LL | match s { - | ^ pattern `&[_, _, ..]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ CONST => {} -LL + &[_, _, ..] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:108:11 - | -LL | match s { - | ^ pattern `&[false]` not covered - | - = note: the matched value is of type `&[bool]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ &[_, _, ..] => {} -LL + &[false] => todo!() - | - -error[E0004]: non-exhaustive patterns: `&[false]` not covered - --> $DIR/slice-patterns-exhaustiveness.rs:121:11 - | -LL | match s1 { - | ^^ pattern `&[false]` not covered - | - = note: the matched value is of type `&[bool; 1]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ CONST1 => {} -LL + &[false] => todo!() - | - -error: aborting due to 20 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/slice-patterns-irrefutable.rs b/src/test/ui/pattern/usefulness/slice-patterns-irrefutable.rs deleted file mode 100644 index cbf64e2c5..000000000 --- a/src/test/ui/pattern/usefulness/slice-patterns-irrefutable.rs +++ /dev/null @@ -1,26 +0,0 @@ -// check-pass - -fn main() { - let s: &[bool] = &[true; 0]; - let s0: &[bool; 0] = &[]; - let s1: &[bool; 1] = &[false; 1]; - let s2: &[bool; 2] = &[false; 2]; - - let [] = s0; - let [_] = s1; - let [_, _] = s2; - - let [..] = s; - let [..] = s0; - let [..] = s1; - let [..] = s2; - - let [_, ..] = s1; - let [.., _] = s1; - let [_, ..] = s2; - let [.., _] = s2; - - let [_, _, ..] = s2; - let [_, .., _] = s2; - let [.., _, _] = s2; -} diff --git a/src/test/ui/pattern/usefulness/slice-patterns-reachability.rs b/src/test/ui/pattern/usefulness/slice-patterns-reachability.rs deleted file mode 100644 index 7c747b5e0..000000000 --- a/src/test/ui/pattern/usefulness/slice-patterns-reachability.rs +++ /dev/null @@ -1,25 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - let s: &[bool] = &[]; - - match s { - [true, ..] => {} - [true, ..] => {} //~ ERROR unreachable pattern - [true] => {} //~ ERROR unreachable pattern - [..] => {} - } - match s { - [.., true] => {} - [.., true] => {} //~ ERROR unreachable pattern - [true] => {} //~ ERROR unreachable pattern - [..] => {} - } - match s { - [false, .., true] => {} - [false, .., true] => {} //~ ERROR unreachable pattern - [false, true] => {} //~ ERROR unreachable pattern - [false] => {} - [..] => {} - } -} diff --git a/src/test/ui/pattern/usefulness/slice-patterns-reachability.stderr b/src/test/ui/pattern/usefulness/slice-patterns-reachability.stderr deleted file mode 100644 index 607ffb765..000000000 --- a/src/test/ui/pattern/usefulness/slice-patterns-reachability.stderr +++ /dev/null @@ -1,44 +0,0 @@ -error: unreachable pattern - --> $DIR/slice-patterns-reachability.rs:8:9 - | -LL | [true, ..] => {} - | ^^^^^^^^^^ - | -note: the lint level is defined here - --> $DIR/slice-patterns-reachability.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-patterns-reachability.rs:9:9 - | -LL | [true] => {} - | ^^^^^^ - -error: unreachable pattern - --> $DIR/slice-patterns-reachability.rs:14:9 - | -LL | [.., true] => {} - | ^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-patterns-reachability.rs:15:9 - | -LL | [true] => {} - | ^^^^^^ - -error: unreachable pattern - --> $DIR/slice-patterns-reachability.rs:20:9 - | -LL | [false, .., true] => {} - | ^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/slice-patterns-reachability.rs:21:9 - | -LL | [false, true] => {} - | ^^^^^^^^^^^^^ - -error: aborting due to 6 previous errors - diff --git a/src/test/ui/pattern/usefulness/stable-gated-fields.rs b/src/test/ui/pattern/usefulness/stable-gated-fields.rs deleted file mode 100644 index 90f40a8d6..000000000 --- a/src/test/ui/pattern/usefulness/stable-gated-fields.rs +++ /dev/null @@ -1,16 +0,0 @@ -// aux-build:unstable.rs - -extern crate unstable; - -use unstable::UnstableStruct; - -fn main() { - let UnstableStruct { stable } = UnstableStruct::default(); - //~^ pattern does not mention field `stable2` and inaccessible fields - - let UnstableStruct { stable, stable2 } = UnstableStruct::default(); - //~^ pattern requires `..` due to inaccessible fields - - // OK: stable field is matched - let UnstableStruct { stable, stable2, .. } = UnstableStruct::default(); -} diff --git a/src/test/ui/pattern/usefulness/stable-gated-fields.stderr b/src/test/ui/pattern/usefulness/stable-gated-fields.stderr deleted file mode 100644 index cf98c51a2..000000000 --- a/src/test/ui/pattern/usefulness/stable-gated-fields.stderr +++ /dev/null @@ -1,29 +0,0 @@ -error[E0027]: pattern does not mention field `stable2` and inaccessible fields - --> $DIR/stable-gated-fields.rs:8:9 - | -LL | let UnstableStruct { stable } = UnstableStruct::default(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^ missing field `stable2` and inaccessible fields - | -help: include the missing field in the pattern and ignore the inaccessible fields - | -LL | let UnstableStruct { stable, stable2, .. } = UnstableStruct::default(); - | ~~~~~~~~~~~~~~~ -help: if you don't care about this missing field, you can explicitly ignore it - | -LL | let UnstableStruct { stable, .. } = UnstableStruct::default(); - | ~~~~~~ - -error: pattern requires `..` due to inaccessible fields - --> $DIR/stable-gated-fields.rs:11:9 - | -LL | let UnstableStruct { stable, stable2 } = UnstableStruct::default(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | -help: ignore the inaccessible and unused fields - | -LL | let UnstableStruct { stable, stable2, .. } = UnstableStruct::default(); - | ++++ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0027`. diff --git a/src/test/ui/pattern/usefulness/stable-gated-patterns.rs b/src/test/ui/pattern/usefulness/stable-gated-patterns.rs deleted file mode 100644 index 03db01160..000000000 --- a/src/test/ui/pattern/usefulness/stable-gated-patterns.rs +++ /dev/null @@ -1,18 +0,0 @@ -// aux-build:unstable.rs - -extern crate unstable; - -use unstable::UnstableEnum; - -fn main() { - match UnstableEnum::Stable { - UnstableEnum::Stable => {} - } - //~^^^ non-exhaustive patterns: `UnstableEnum::Stable2` and `_` not covered - - match UnstableEnum::Stable { - UnstableEnum::Stable => {} - UnstableEnum::Stable2 => {} - } - //~^^^^ non-exhaustive patterns: `_` not covered -} diff --git a/src/test/ui/pattern/usefulness/stable-gated-patterns.stderr b/src/test/ui/pattern/usefulness/stable-gated-patterns.stderr deleted file mode 100644 index 7b8588a3c..000000000 --- a/src/test/ui/pattern/usefulness/stable-gated-patterns.stderr +++ /dev/null @@ -1,42 +0,0 @@ -error[E0004]: non-exhaustive patterns: `UnstableEnum::Stable2` and `_` not covered - --> $DIR/stable-gated-patterns.rs:8:11 - | -LL | match UnstableEnum::Stable { - | ^^^^^^^^^^^^^^^^^^^^ patterns `UnstableEnum::Stable2` and `_` not covered - | -note: `UnstableEnum` defined here - --> $DIR/auxiliary/unstable.rs:9:5 - | -LL | pub enum UnstableEnum { - | --------------------- -... -LL | Stable2, - | ^^^^^^^ not covered - = note: the matched value is of type `UnstableEnum` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern, a match arm with multiple or-patterns as shown, or multiple match arms - | -LL ~ UnstableEnum::Stable => {} -LL + UnstableEnum::Stable2 | _ => todo!() - | - -error[E0004]: non-exhaustive patterns: `_` not covered - --> $DIR/stable-gated-patterns.rs:13:11 - | -LL | match UnstableEnum::Stable { - | ^^^^^^^^^^^^^^^^^^^^ pattern `_` not covered - | -note: `UnstableEnum` defined here - --> $DIR/auxiliary/unstable.rs:5:1 - | -LL | pub enum UnstableEnum { - | ^^^^^^^^^^^^^^^^^^^^^ - = note: the matched value is of type `UnstableEnum` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ UnstableEnum::Stable2 => {} -LL + _ => todo!() - | - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/struct-like-enum-nonexhaustive.rs b/src/test/ui/pattern/usefulness/struct-like-enum-nonexhaustive.rs deleted file mode 100644 index b1fc0f5ad..000000000 --- a/src/test/ui/pattern/usefulness/struct-like-enum-nonexhaustive.rs +++ /dev/null @@ -1,12 +0,0 @@ -enum A { - B { x: Option<isize> }, - C -} - -fn main() { - let x = A::B { x: Some(3) }; - match x { //~ ERROR non-exhaustive patterns - A::C => {} - A::B { x: None } => {} - } -} diff --git a/src/test/ui/pattern/usefulness/struct-like-enum-nonexhaustive.stderr b/src/test/ui/pattern/usefulness/struct-like-enum-nonexhaustive.stderr deleted file mode 100644 index 85c97be29..000000000 --- a/src/test/ui/pattern/usefulness/struct-like-enum-nonexhaustive.stderr +++ /dev/null @@ -1,23 +0,0 @@ -error[E0004]: non-exhaustive patterns: `A::B { x: Some(_) }` not covered - --> $DIR/struct-like-enum-nonexhaustive.rs:8:11 - | -LL | match x { - | ^ pattern `A::B { x: Some(_) }` not covered - | -note: `A` defined here - --> $DIR/struct-like-enum-nonexhaustive.rs:2:5 - | -LL | enum A { - | - -LL | B { x: Option<isize> }, - | ^ not covered - = note: the matched value is of type `A` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ A::B { x: None } => {} -LL + A::B { x: Some(_) } => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/struct-pattern-match-useless.rs b/src/test/ui/pattern/usefulness/struct-pattern-match-useless.rs deleted file mode 100644 index 93f0a9317..000000000 --- a/src/test/ui/pattern/usefulness/struct-pattern-match-useless.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![deny(unreachable_patterns)] - -struct Foo { - x: isize, - y: isize, -} - -pub fn main() { - let a = Foo { x: 1, y: 2 }; - match a { - Foo { x: _x, y: _y } => (), - Foo { .. } => () //~ ERROR unreachable pattern - } - -} diff --git a/src/test/ui/pattern/usefulness/struct-pattern-match-useless.stderr b/src/test/ui/pattern/usefulness/struct-pattern-match-useless.stderr deleted file mode 100644 index fbee33de6..000000000 --- a/src/test/ui/pattern/usefulness/struct-pattern-match-useless.stderr +++ /dev/null @@ -1,16 +0,0 @@ -error: unreachable pattern - --> $DIR/struct-pattern-match-useless.rs:12:9 - | -LL | Foo { x: _x, y: _y } => (), - | -------------------- matches any value -LL | Foo { .. } => () - | ^^^^^^^^^^ unreachable pattern - | -note: the lint level is defined here - --> $DIR/struct-pattern-match-useless.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/pattern/usefulness/top-level-alternation.rs b/src/test/ui/pattern/usefulness/top-level-alternation.rs deleted file mode 100644 index e8cd12ea4..000000000 --- a/src/test/ui/pattern/usefulness/top-level-alternation.rs +++ /dev/null @@ -1,57 +0,0 @@ -#![deny(unreachable_patterns)] - -fn main() { - while let 0..=2 | 1 = 0 {} //~ ERROR unreachable pattern - if let 0..=2 | 1 = 0 {} //~ ERROR unreachable pattern - - match 0u8 { - 0 - | 0 => {} //~ ERROR unreachable pattern - _ => {} - } - match Some(0u8) { - Some(0) - | Some(0) => {} //~ ERROR unreachable pattern - _ => {} - } - match (0u8, 0u8) { - (0, _) | (_, 0) => {} - (0, 0) => {} //~ ERROR unreachable pattern - (1, 1) => {} - _ => {} - } - match (0u8, 0u8) { - (0, 1) | (2, 3) => {} - (0, 3) => {} - (2, 1) => {} - _ => {} - } - match (0u8, 0u8) { - (_, 0) | (_, 1) => {} - _ => {} - } - match (0u8, 0u8) { - (0, _) | (1, _) => {} - _ => {} - } - match Some(0u8) { - None | Some(_) => {} - _ => {} //~ ERROR unreachable pattern - } - match Some(0u8) { - None | Some(_) => {} - Some(_) => {} //~ ERROR unreachable pattern - None => {} //~ ERROR unreachable pattern - } - match Some(0u8) { - Some(_) => {} - None => {} - None | Some(_) => {} //~ ERROR unreachable pattern - } - match 0u8 { - 1 | 2 => {}, - 1..=2 => {}, //~ ERROR unreachable pattern - _ => {}, - } - let (0 | 0) = 0 else { return }; //~ ERROR unreachable pattern -} diff --git a/src/test/ui/pattern/usefulness/top-level-alternation.stderr b/src/test/ui/pattern/usefulness/top-level-alternation.stderr deleted file mode 100644 index 17fa951c5..000000000 --- a/src/test/ui/pattern/usefulness/top-level-alternation.stderr +++ /dev/null @@ -1,74 +0,0 @@ -error: unreachable pattern - --> $DIR/top-level-alternation.rs:4:23 - | -LL | while let 0..=2 | 1 = 0 {} - | ^ - | -note: the lint level is defined here - --> $DIR/top-level-alternation.rs:1:9 - | -LL | #![deny(unreachable_patterns)] - | ^^^^^^^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:5:20 - | -LL | if let 0..=2 | 1 = 0 {} - | ^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:9:15 - | -LL | | 0 => {} - | ^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:14:15 - | -LL | | Some(0) => {} - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:19:9 - | -LL | (0, 0) => {} - | ^^^^^^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:39:9 - | -LL | _ => {} - | ^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:43:9 - | -LL | Some(_) => {} - | ^^^^^^^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:44:9 - | -LL | None => {} - | ^^^^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:49:9 - | -LL | None | Some(_) => {} - | ^^^^^^^^^^^^^^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:53:9 - | -LL | 1..=2 => {}, - | ^^^^^ - -error: unreachable pattern - --> $DIR/top-level-alternation.rs:56:14 - | -LL | let (0 | 0) = 0 else { return }; - | ^ - -error: aborting due to 11 previous errors - diff --git a/src/test/ui/pattern/usefulness/tuple-struct-nonexhaustive.rs b/src/test/ui/pattern/usefulness/tuple-struct-nonexhaustive.rs deleted file mode 100644 index 76bcf3fbd..000000000 --- a/src/test/ui/pattern/usefulness/tuple-struct-nonexhaustive.rs +++ /dev/null @@ -1,9 +0,0 @@ -struct Foo(isize, isize); - -fn main() { - let x = Foo(1, 2); - match x { //~ ERROR non-exhaustive - Foo(1, b) => println!("{}", b), - Foo(2, b) => println!("{}", b) - } -} diff --git a/src/test/ui/pattern/usefulness/tuple-struct-nonexhaustive.stderr b/src/test/ui/pattern/usefulness/tuple-struct-nonexhaustive.stderr deleted file mode 100644 index e2a65ff85..000000000 --- a/src/test/ui/pattern/usefulness/tuple-struct-nonexhaustive.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0004]: non-exhaustive patterns: `Foo(_, _)` not covered - --> $DIR/tuple-struct-nonexhaustive.rs:5:11 - | -LL | match x { - | ^ pattern `Foo(_, _)` not covered - | -note: `Foo` defined here - --> $DIR/tuple-struct-nonexhaustive.rs:1:8 - | -LL | struct Foo(isize, isize); - | ^^^ - = note: the matched value is of type `Foo` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ Foo(2, b) => println!("{}", b), -LL + Foo(_, _) => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/type_polymorphic_byte_str_literals.rs b/src/test/ui/pattern/usefulness/type_polymorphic_byte_str_literals.rs deleted file mode 100644 index cb44c1da7..000000000 --- a/src/test/ui/pattern/usefulness/type_polymorphic_byte_str_literals.rs +++ /dev/null @@ -1,36 +0,0 @@ -#[deny(unreachable_patterns)] - -fn parse_data1(data: &[u8]) -> u32 { - match data { - b"" => 1, - _ => 2, - } -} - -fn parse_data2(data: &[u8]) -> u32 { - match data { //~ ERROR non-exhaustive patterns: `&[_, ..]` not covered - b"" => 1, - } -} - -fn parse_data3(data: &[u8; 0]) -> u8 { - match data { - b"" => 1, - } -} - -fn parse_data4(data: &[u8]) -> u8 { - match data { //~ ERROR non-exhaustive patterns - b"aaa" => 0, - [_, _, _] => 1, - } -} - -fn parse_data5(data: &[u8; 3]) -> u8 { - match data { - b"aaa" => 0, - [_, _, _] => 1, - } -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/type_polymorphic_byte_str_literals.stderr b/src/test/ui/pattern/usefulness/type_polymorphic_byte_str_literals.stderr deleted file mode 100644 index acae605da..000000000 --- a/src/test/ui/pattern/usefulness/type_polymorphic_byte_str_literals.stderr +++ /dev/null @@ -1,29 +0,0 @@ -error[E0004]: non-exhaustive patterns: `&[_, ..]` not covered - --> $DIR/type_polymorphic_byte_str_literals.rs:11:11 - | -LL | match data { - | ^^^^ pattern `&[_, ..]` not covered - | - = note: the matched value is of type `&[u8]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ b"" => 1, -LL ~ &[_, ..] => todo!(), - | - -error[E0004]: non-exhaustive patterns: `&[]`, `&[_]`, `&[_, _]` and 1 more not covered - --> $DIR/type_polymorphic_byte_str_literals.rs:23:11 - | -LL | match data { - | ^^^^ patterns `&[]`, `&[_]`, `&[_, _]` and 1 more not covered - | - = note: the matched value is of type `&[u8]` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown, or multiple match arms - | -LL ~ [_, _, _] => 1, -LL ~ _ => todo!(), - | - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0004`. diff --git a/src/test/ui/pattern/usefulness/uninhabited.rs b/src/test/ui/pattern/usefulness/uninhabited.rs deleted file mode 100644 index 5622808d4..000000000 --- a/src/test/ui/pattern/usefulness/uninhabited.rs +++ /dev/null @@ -1,143 +0,0 @@ -// check-pass -// aux-build:empty.rs -// -// This tests plays with matching and uninhabited types. This also serves as a test for the -// `Ty::is_inhabited_from` function. -#![feature(never_type)] -#![feature(never_type_fallback)] -#![feature(exhaustive_patterns)] -#![deny(unreachable_patterns)] - -macro_rules! assert_empty { - ($ty:ty) => { - const _: () = { - fn assert_empty(x: $ty) { - match x {} - match Some(x) { - None => {} - } - } - }; - }; -} -macro_rules! assert_non_empty { - ($ty:ty) => { - const _: () = { - fn assert_non_empty(x: $ty) { - match x { - _ => {} - } - match Some(x) { - None => {} - Some(_) => {} - } - } - }; - }; -} - -extern crate empty; -assert_empty!(empty::EmptyForeignEnum); -assert_empty!(empty::VisiblyUninhabitedForeignStruct); -assert_non_empty!(empty::SecretlyUninhabitedForeignStruct); - -enum Void {} -assert_empty!(Void); - -enum Enum2 { - Foo(Void), - Bar(!), -} -assert_empty!(Enum2); - -enum Enum3 { - Foo(Void), - Bar { - x: u64, - y: !, - }, -} -assert_empty!(Enum3); - -enum Enum4 { - Foo(u64), - Bar(!), -} -assert_non_empty!(Enum4); - -struct Struct1(empty::EmptyForeignEnum); -assert_empty!(Struct1); - -struct Struct2 { - x: u64, - y: !, -} -assert_empty!(Struct2); - -union Union { - foo: !, -} -assert_non_empty!(Union); - -assert_empty!((!, String)); - -assert_non_empty!(&'static !); -assert_non_empty!(&'static Struct1); -assert_non_empty!(&'static &'static &'static !); - -assert_empty!([!; 1]); -assert_empty!([Void; 2]); -assert_non_empty!([!; 0]); -assert_non_empty!(&'static [!]); - -mod visibility { - /// This struct can only be seen to be inhabited in modules `b`, `c` or `d`, because otherwise - /// the uninhabitedness of both `SecretlyUninhabited` structs is hidden. - struct SometimesEmptyStruct { - x: a::b::SecretlyUninhabited, - y: c::AlsoSecretlyUninhabited, - } - - /// This enum can only be seen to be inhabited in module `d`. - enum SometimesEmptyEnum { - X(c::AlsoSecretlyUninhabited), - Y(c::d::VerySecretlyUninhabited), - } - - mod a { - use super::*; - pub mod b { - use super::*; - pub struct SecretlyUninhabited { - _priv: !, - } - assert_empty!(SometimesEmptyStruct); - } - - assert_non_empty!(SometimesEmptyStruct); - assert_non_empty!(SometimesEmptyEnum); - } - - mod c { - use super::*; - pub struct AlsoSecretlyUninhabited { - _priv: ::Struct1, - } - assert_empty!(SometimesEmptyStruct); - assert_non_empty!(SometimesEmptyEnum); - - pub mod d { - use super::*; - pub struct VerySecretlyUninhabited { - _priv: !, - } - assert_empty!(SometimesEmptyStruct); - assert_empty!(SometimesEmptyEnum); - } - } - - assert_non_empty!(SometimesEmptyStruct); - assert_non_empty!(SometimesEmptyEnum); -} - -fn main() {} diff --git a/src/test/ui/pattern/usefulness/unstable-gated-fields.rs b/src/test/ui/pattern/usefulness/unstable-gated-fields.rs deleted file mode 100644 index 2b473ae98..000000000 --- a/src/test/ui/pattern/usefulness/unstable-gated-fields.rs +++ /dev/null @@ -1,18 +0,0 @@ -#![feature(unstable_test_feature)] - -// aux-build:unstable.rs - -extern crate unstable; - -use unstable::UnstableStruct; - -fn main() { - let UnstableStruct { stable, stable2, } = UnstableStruct::default(); - //~^ pattern does not mention field `unstable` - - let UnstableStruct { stable, unstable, } = UnstableStruct::default(); - //~^ pattern does not mention field `stable2` - - // OK: stable field is matched - let UnstableStruct { stable, stable2, unstable } = UnstableStruct::default(); -} diff --git a/src/test/ui/pattern/usefulness/unstable-gated-fields.stderr b/src/test/ui/pattern/usefulness/unstable-gated-fields.stderr deleted file mode 100644 index e4f5fa06b..000000000 --- a/src/test/ui/pattern/usefulness/unstable-gated-fields.stderr +++ /dev/null @@ -1,33 +0,0 @@ -error[E0027]: pattern does not mention field `unstable` - --> $DIR/unstable-gated-fields.rs:10:9 - | -LL | let UnstableStruct { stable, stable2, } = UnstableStruct::default(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing field `unstable` - | -help: include the missing field in the pattern - | -LL | let UnstableStruct { stable, stable2, unstable } = UnstableStruct::default(); - | ~~~~~~~~~~~~ -help: if you don't care about this missing field, you can explicitly ignore it - | -LL | let UnstableStruct { stable, stable2, .. } = UnstableStruct::default(); - | ~~~~~~ - -error[E0027]: pattern does not mention field `stable2` - --> $DIR/unstable-gated-fields.rs:13:9 - | -LL | let UnstableStruct { stable, unstable, } = UnstableStruct::default(); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing field `stable2` - | -help: include the missing field in the pattern - | -LL | let UnstableStruct { stable, unstable, stable2 } = UnstableStruct::default(); - | ~~~~~~~~~~~ -help: if you don't care about this missing field, you can explicitly ignore it - | -LL | let UnstableStruct { stable, unstable, .. } = UnstableStruct::default(); - | ~~~~~~ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0027`. diff --git a/src/test/ui/pattern/usefulness/unstable-gated-patterns.rs b/src/test/ui/pattern/usefulness/unstable-gated-patterns.rs deleted file mode 100644 index 7046555e0..000000000 --- a/src/test/ui/pattern/usefulness/unstable-gated-patterns.rs +++ /dev/null @@ -1,22 +0,0 @@ -#![feature(unstable_test_feature)] - -// aux-build:unstable.rs - -extern crate unstable; - -use unstable::UnstableEnum; - -fn main() { - match UnstableEnum::Stable { - UnstableEnum::Stable => {} - UnstableEnum::Stable2 => {} - } - //~^^^^ non-exhaustive patterns: `UnstableEnum::Unstable` not covered - - // Ok: all variants are explicitly matched - match UnstableEnum::Stable { - UnstableEnum::Stable => {} - UnstableEnum::Stable2 => {} - UnstableEnum::Unstable => {} - } -} diff --git a/src/test/ui/pattern/usefulness/unstable-gated-patterns.stderr b/src/test/ui/pattern/usefulness/unstable-gated-patterns.stderr deleted file mode 100644 index 6dc9a4058..000000000 --- a/src/test/ui/pattern/usefulness/unstable-gated-patterns.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error[E0004]: non-exhaustive patterns: `UnstableEnum::Unstable` not covered - --> $DIR/unstable-gated-patterns.rs:10:11 - | -LL | match UnstableEnum::Stable { - | ^^^^^^^^^^^^^^^^^^^^ pattern `UnstableEnum::Unstable` not covered - | -note: `UnstableEnum` defined here - --> $DIR/auxiliary/unstable.rs:11:5 - | -LL | pub enum UnstableEnum { - | --------------------- -... -LL | Unstable, - | ^^^^^^^^ not covered - = note: the matched value is of type `UnstableEnum` -help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown - | -LL ~ UnstableEnum::Stable2 => {} -LL + UnstableEnum::Unstable => todo!() - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0004`. |