Correctly gate the parsing of match arms without body
This commit is contained in:
parent
21cce21d8c
commit
e274372689
9 changed files with 227 additions and 26 deletions
|
|
@ -12,16 +12,67 @@ fn main() {
|
|||
unsafe {
|
||||
let ptr: *const Void = NonNull::dangling().as_ptr();
|
||||
match *ptr {
|
||||
! //~ ERROR `!` patterns are experimental
|
||||
!
|
||||
//~^ ERROR `!` patterns are experimental
|
||||
//~| ERROR `!` patterns are experimental
|
||||
}
|
||||
// Check that the gate operates even behind `cfg`.
|
||||
#[cfg(FALSE)]
|
||||
match *ptr {
|
||||
!
|
||||
//~^ ERROR `!` patterns are experimental
|
||||
//~| ERROR `!` patterns are experimental
|
||||
}
|
||||
#[cfg(FALSE)]
|
||||
match *ptr {
|
||||
! => {}
|
||||
//~^ ERROR `!` patterns are experimental
|
||||
}
|
||||
}
|
||||
|
||||
// Correctly gate match arms with no body.
|
||||
match Some(0) {
|
||||
None => {}
|
||||
Some(_),
|
||||
//~^ ERROR unexpected `,` in pattern
|
||||
}
|
||||
match Some(0) {
|
||||
None => {}
|
||||
Some(_)
|
||||
//~^ ERROR `match` arm with no body
|
||||
}
|
||||
match Some(0) {
|
||||
_ => {}
|
||||
Some(_) if false,
|
||||
//~^ ERROR `match` arm with no body
|
||||
Some(_) if false
|
||||
//~^ ERROR `match` arm with no body
|
||||
}
|
||||
match res {
|
||||
Ok(_) => {}
|
||||
Err(!),
|
||||
//~^ ERROR `match` arm with no body
|
||||
//~| ERROR `!` patterns are experimental
|
||||
}
|
||||
match res {
|
||||
Err(!) if false,
|
||||
//~^ ERROR `match` arm with no body
|
||||
//~| ERROR a guard on a never pattern will never be run
|
||||
//~| ERROR `!` patterns are experimental
|
||||
_ => {}
|
||||
}
|
||||
|
||||
// Check that the gate operates even behind `cfg`.
|
||||
#[cfg(FALSE)]
|
||||
unsafe {
|
||||
let ptr: *const Void = NonNull::dangling().as_ptr();
|
||||
match *ptr {
|
||||
! => {} //~ ERROR `!` patterns are experimental
|
||||
}
|
||||
match Some(0) {
|
||||
None => {}
|
||||
#[cfg(FALSE)]
|
||||
Some(_)
|
||||
//~^ ERROR `match` arm with no body
|
||||
}
|
||||
match Some(0) {
|
||||
_ => {}
|
||||
#[cfg(FALSE)]
|
||||
Some(_) if false
|
||||
//~^ ERROR `match` arm with no body
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,18 @@
|
|||
error: unexpected `,` in pattern
|
||||
--> $DIR/feature-gate-never_patterns.rs:36:16
|
||||
|
|
||||
LL | Some(_),
|
||||
| ^
|
||||
|
|
||||
help: try adding parentheses to match on a tuple...
|
||||
|
|
||||
LL | (Some(_),)
|
||||
| + +
|
||||
help: ...or a vertical bar to match on multiple alternatives
|
||||
|
|
||||
LL | Some(_) |
|
||||
|
|
||||
|
||||
error[E0408]: variable `_x` is not bound in all patterns
|
||||
--> $DIR/feature-gate-never_patterns.rs:8:19
|
||||
|
|
||||
|
|
@ -25,7 +40,36 @@ LL | !
|
|||
= help: add `#![feature(never_patterns)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: `!` patterns are experimental
|
||||
--> $DIR/feature-gate-never_patterns.rs:24:13
|
||||
--> $DIR/feature-gate-never_patterns.rs:15:13
|
||||
|
|
||||
LL | !
|
||||
| ^
|
||||
|
|
||||
= note: see issue #118155 <https://github.com/rust-lang/rust/issues/118155> for more information
|
||||
= help: add `#![feature(never_patterns)]` to the crate attributes to enable
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error[E0658]: `!` patterns are experimental
|
||||
--> $DIR/feature-gate-never_patterns.rs:22:13
|
||||
|
|
||||
LL | !
|
||||
| ^
|
||||
|
|
||||
= note: see issue #118155 <https://github.com/rust-lang/rust/issues/118155> for more information
|
||||
= help: add `#![feature(never_patterns)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: `!` patterns are experimental
|
||||
--> $DIR/feature-gate-never_patterns.rs:22:13
|
||||
|
|
||||
LL | !
|
||||
| ^
|
||||
|
|
||||
= note: see issue #118155 <https://github.com/rust-lang/rust/issues/118155> for more information
|
||||
= help: add `#![feature(never_patterns)]` to the crate attributes to enable
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error[E0658]: `!` patterns are experimental
|
||||
--> $DIR/feature-gate-never_patterns.rs:28:13
|
||||
|
|
||||
LL | ! => {}
|
||||
| ^
|
||||
|
|
@ -33,7 +77,73 @@ LL | ! => {}
|
|||
= note: see issue #118155 <https://github.com/rust-lang/rust/issues/118155> for more information
|
||||
= help: add `#![feature(never_patterns)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: `match` arm with no body
|
||||
--> $DIR/feature-gate-never_patterns.rs:41:9
|
||||
|
|
||||
LL | Some(_)
|
||||
| ^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/feature-gate-never_patterns.rs:46:9
|
||||
|
|
||||
LL | Some(_) if false,
|
||||
| ^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/feature-gate-never_patterns.rs:48:9
|
||||
|
|
||||
LL | Some(_) if false
|
||||
| ^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error[E0658]: `!` patterns are experimental
|
||||
--> $DIR/feature-gate-never_patterns.rs:53:13
|
||||
|
|
||||
LL | Err(!),
|
||||
| ^
|
||||
|
|
||||
= note: see issue #118155 <https://github.com/rust-lang/rust/issues/118155> for more information
|
||||
= help: add `#![feature(never_patterns)]` to the crate attributes to enable
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/feature-gate-never_patterns.rs:53:9
|
||||
|
|
||||
LL | Err(!),
|
||||
| ^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error[E0658]: `!` patterns are experimental
|
||||
--> $DIR/feature-gate-never_patterns.rs:58:13
|
||||
|
|
||||
LL | Err(!) if false,
|
||||
| ^
|
||||
|
|
||||
= note: see issue #118155 <https://github.com/rust-lang/rust/issues/118155> for more information
|
||||
= help: add `#![feature(never_patterns)]` to the crate attributes to enable
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/feature-gate-never_patterns.rs:58:9
|
||||
|
|
||||
LL | Err(!) if false,
|
||||
| ^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/feature-gate-never_patterns.rs:69:9
|
||||
|
|
||||
LL | Some(_)
|
||||
| ^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/feature-gate-never_patterns.rs:75:9
|
||||
|
|
||||
LL | Some(_) if false
|
||||
| ^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: a guard on a never pattern will never be run
|
||||
--> $DIR/feature-gate-never_patterns.rs:58:19
|
||||
|
|
||||
LL | Err(!) if false,
|
||||
| ^^^^^ help: remove this guard
|
||||
|
||||
error: aborting due to 18 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0408, E0658.
|
||||
For more information about an error, try `rustc --explain E0408`.
|
||||
|
|
|
|||
|
|
@ -66,8 +66,6 @@ fn main() {
|
|||
pat!()
|
||||
//~^ ERROR expected `,` following `match` arm
|
||||
//~| HELP missing a comma here
|
||||
//~| ERROR `match` arm with no body
|
||||
//~| HELP add a body after the pattern
|
||||
_ => {}
|
||||
}
|
||||
match Some(false) {
|
||||
|
|
|
|||
|
|
@ -68,19 +68,19 @@ error: `match` arm with no body
|
|||
--> $DIR/match-arm-without-body.rs:30:9
|
||||
|
|
||||
LL | Some(_) if true
|
||||
| ^^^^^^^^^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
| ^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/match-arm-without-body.rs:40:9
|
||||
|
|
||||
LL | Some(_) if true,
|
||||
| ^^^^^^^^^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
| ^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/match-arm-without-body.rs:45:9
|
||||
|
|
||||
LL | Some(_) if true,
|
||||
| ^^^^^^^^^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
| ^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/match-arm-without-body.rs:51:9
|
||||
|
|
@ -98,19 +98,13 @@ error: `match` arm with no body
|
|||
--> $DIR/match-arm-without-body.rs:61:9
|
||||
|
|
||||
LL | pat!() if true,
|
||||
| ^^^^^^^^^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/match-arm-without-body.rs:66:9
|
||||
|
|
||||
LL | pat!()
|
||||
| ^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: `match` arm with no body
|
||||
--> $DIR/match-arm-without-body.rs:74:9
|
||||
--> $DIR/match-arm-without-body.rs:72:9
|
||||
|
|
||||
LL | pat!(),
|
||||
| ^^^^^^- help: add a body after the pattern: `=> todo!(),`
|
||||
|
||||
error: aborting due to 14 previous errors
|
||||
error: aborting due to 13 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue