|  | // Check that never patterns require the feature gate. | 
|  | use std::ptr::NonNull; | 
|  |  | 
|  | enum Void {} | 
|  |  | 
|  | fn main() { | 
|  | let res: Result<u32, Void> = Ok(0); | 
|  | let (Ok(_x) | Err(&!)) = res.as_ref(); | 
|  | //~^ ERROR `!` patterns are experimental | 
|  |  | 
|  | unsafe { | 
|  | let ptr: *const Void = NonNull::dangling().as_ptr(); | 
|  | match *ptr { | 
|  | ! | 
|  | //~^ ERROR `!` patterns are experimental | 
|  | } | 
|  | // Check that the gate operates even behind `cfg`. | 
|  | #[cfg(false)] | 
|  | match *ptr { | 
|  | ! | 
|  | //~^ 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 `!` patterns are experimental | 
|  | } | 
|  | match res { | 
|  | Err(!) if false, | 
|  | //~^ ERROR `!` patterns are experimental | 
|  | //~| ERROR a guard on a never pattern will never be run | 
|  | _ => {} | 
|  | } | 
|  |  | 
|  | // Check that the gate operates even behind `cfg`. | 
|  | 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 | 
|  | } | 
|  | } |