summaryrefslogtreecommitdiffstats
path: root/tests/ui/feature-gates/feature-gate-never_patterns.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/feature-gates/feature-gate-never_patterns.rs')
-rw-r--r--tests/ui/feature-gates/feature-gate-never_patterns.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/ui/feature-gates/feature-gate-never_patterns.rs b/tests/ui/feature-gates/feature-gate-never_patterns.rs
new file mode 100644
index 000000000..f39106223
--- /dev/null
+++ b/tests/ui/feature-gates/feature-gate-never_patterns.rs
@@ -0,0 +1,74 @@
+// 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
+ //~| ERROR: is not bound in all patterns
+
+ 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
+ }
+}