Allow explicit matches on ! without warning
This commit is contained in:
parent
5ea8eb55cd
commit
fe09dbfcba
3 changed files with 40 additions and 5 deletions
|
|
@ -608,10 +608,6 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
|
|||
self.check_expr_has_type_or_error(discrim, discrim_ty);
|
||||
};
|
||||
|
||||
// If the discriminant diverges, the match is pointless (e.g.,
|
||||
// `match (return) { }`).
|
||||
self.warn_if_unreachable(expr.id, expr.span, "expression");
|
||||
|
||||
// If there are no arms, that is a diverging match; a special case.
|
||||
if arms.is_empty() {
|
||||
self.diverges.set(self.diverges.get() | Diverges::Always);
|
||||
|
|
@ -620,7 +616,6 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
|
|||
|
||||
// Otherwise, we have to union together the types that the
|
||||
// arms produce and so forth.
|
||||
|
||||
let discrim_diverges = self.diverges.get();
|
||||
self.diverges.set(Diverges::Maybe);
|
||||
|
||||
|
|
|
|||
18
src/test/ui/unreachable/unwarned-match-on-never.rs
Normal file
18
src/test/ui/unreachable/unwarned-match-on-never.rs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#![deny(unreachable_code)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
#![feature(never_type)]
|
||||
|
||||
fn foo(x: !) -> bool {
|
||||
// Explicit matches on the never type are unwarned.
|
||||
match x {}
|
||||
// But matches in unreachable code are warned.
|
||||
match x {} //~ ERROR: unreachable expression
|
||||
}
|
||||
|
||||
fn main() {
|
||||
return;
|
||||
match () { //~ ERROR: unreachable expression
|
||||
() => (),
|
||||
}
|
||||
}
|
||||
22
src/test/ui/unreachable/unwarned-match-on-never.stderr
Normal file
22
src/test/ui/unreachable/unwarned-match-on-never.stderr
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
error: unreachable expression
|
||||
--> $DIR/unwarned-match-on-never.rs:10:5
|
||||
|
|
||||
LL | match x {} //~ ERROR: unreachable expression
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
note: lint level defined here
|
||||
--> $DIR/unwarned-match-on-never.rs:1:9
|
||||
|
|
||||
LL | #![deny(unreachable_code)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unreachable expression
|
||||
--> $DIR/unwarned-match-on-never.rs:15:5
|
||||
|
|
||||
LL | / match () { //~ ERROR: unreachable expression
|
||||
LL | | () => (),
|
||||
LL | | }
|
||||
| |_____^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue