Improve error message, fix and add tests.
Changes the non-exhaustive match error message to generate more general witnesses.
This commit is contained in:
parent
9c5e86d0cd
commit
9ba9cd5fd5
5 changed files with 131 additions and 31 deletions
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
fn check(list: &[Option<()>]) {
|
||||
match list {
|
||||
//~^ ERROR `&[None, Some(_), None, _]` and `&[Some(_), Some(_), None, _]` not covered
|
||||
//~^ ERROR `&[_, Some(_), None, _]` not covered
|
||||
&[] => {},
|
||||
&[_] => {},
|
||||
&[_, _] => {},
|
||||
|
|
|
|||
38
src/test/compile-fail/uninhabited-irrefutable.rs
Normal file
38
src/test/compile-fail/uninhabited-irrefutable.rs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(never_type)]
|
||||
|
||||
mod foo {
|
||||
pub struct SecretlyEmpty {
|
||||
_priv: !,
|
||||
}
|
||||
|
||||
pub struct NotSoSecretlyEmpty {
|
||||
pub _pub: !,
|
||||
}
|
||||
}
|
||||
|
||||
struct NotSoSecretlyEmpty {
|
||||
_priv: !,
|
||||
}
|
||||
|
||||
enum Foo {
|
||||
A(foo::SecretlyEmpty),
|
||||
B(foo::NotSoSecretlyEmpty),
|
||||
C(NotSoSecretlyEmpty),
|
||||
D(u32),
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let x: Foo = Foo::D(123);
|
||||
let Foo::D(_y) = x; //~ ERROR refutable pattern in local binding: `A(_)` not covered
|
||||
}
|
||||
|
||||
49
src/test/compile-fail/uninhabited-patterns.rs
Normal file
49
src/test/compile-fail/uninhabited-patterns.rs
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![feature(box_patterns)]
|
||||
#![feature(slice_patterns)]
|
||||
#![feature(box_syntax)]
|
||||
#![feature(never_type)]
|
||||
#![deny(unreachable_patterns)]
|
||||
|
||||
mod foo {
|
||||
pub struct SecretlyEmpty {
|
||||
_priv: !,
|
||||
}
|
||||
}
|
||||
|
||||
struct NotSoSecretlyEmpty {
|
||||
_priv: !,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let x: &[!] = &[];
|
||||
|
||||
match x {
|
||||
&[] => (),
|
||||
&[..] => (), //~ ERROR unreachable pattern
|
||||
};
|
||||
|
||||
let x: Result<Box<NotSoSecretlyEmpty>, &[Result<!, !>]> = Err(&[]);
|
||||
match x {
|
||||
Ok(box _) => (), //~ ERROR unreachable pattern
|
||||
Err(&[]) => (),
|
||||
Err(&[..]) => (), //~ ERROR unreachable pattern
|
||||
}
|
||||
|
||||
let x: Result<foo::SecretlyEmpty, Result<NotSoSecretlyEmpty, u32>> = Err(Err(123));
|
||||
match x {
|
||||
Ok(_y) => (),
|
||||
Err(Err(_y)) => (),
|
||||
Err(Ok(_y)) => (), //~ ERROR unreachable pattern
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4,11 +4,11 @@ error[E0004]: non-exhaustive patterns: `(B, _)`, `(C, _)`, `(D, _)` and 2 more n
|
|||
20 | match (A, ()) {
|
||||
| ^^^^^^^ patterns `(B, _)`, `(C, _)`, `(D, _)` and 2 more not covered
|
||||
|
||||
error[E0004]: non-exhaustive patterns: `(A, B)`, `(B, B)`, `(C, B)` and 27 more not covered
|
||||
error[E0004]: non-exhaustive patterns: `(_, B)`, `(_, C)`, `(_, D)` and 2 more not covered
|
||||
--> $DIR/issue-35609.rs:24:11
|
||||
|
|
||||
24 | match (A, A) {
|
||||
| ^^^^^^ patterns `(A, B)`, `(B, B)`, `(C, B)` and 27 more not covered
|
||||
| ^^^^^^ patterns `(_, B)`, `(_, C)`, `(_, D)` and 2 more not covered
|
||||
|
||||
error[E0004]: non-exhaustive patterns: `((B, _), _)`, `((C, _), _)`, `((D, _), _)` and 2 more not covered
|
||||
--> $DIR/issue-35609.rs:28:11
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue