File tree 2 files changed +45
-0
lines changed
tests/ui/rfcs/rfc-0000-never_patterns
2 files changed +45
-0
lines changed Original file line number Diff line number Diff line change
1
+ // run-pass
2
+ #![ feature( never_patterns) ]
3
+ #![ allow( incomplete_features) ]
4
+
5
+ use ParsedAs :: * ;
6
+ #[ derive( Debug , PartialEq , Eq ) ]
7
+ enum ParsedAs {
8
+ Pattern ,
9
+ Never ,
10
+ Other ,
11
+ }
12
+
13
+ macro_rules! detect_pat {
14
+ ( $p: pat) => {
15
+ Pattern
16
+ } ;
17
+ ( !) => {
18
+ Never
19
+ } ;
20
+ ( $( $x: tt) * ) => {
21
+ Other
22
+ } ;
23
+ }
24
+
25
+ fn main ( ) {
26
+ // For backwards compatibility this does not match `$p:pat`. This is similar to how or-patterns
27
+ // without parens don't match `$p:pat` either.
28
+ assert_eq ! ( detect_pat!( !) , Never ) ;
29
+ assert_eq ! ( detect_pat!( ! | true ) , Other ) ;
30
+ assert_eq ! ( detect_pat!( true | !) , Other ) ;
31
+
32
+ // These are never patterns; they take no body when they're in a match arm.
33
+ assert_eq ! ( detect_pat!( ( !) ) , Pattern ) ;
34
+ assert_eq ! ( detect_pat!( ( true , !) ) , Pattern ) ;
35
+ assert_eq ! ( detect_pat!( Some ( !) ) , Pattern ) ;
36
+
37
+ // These count as normal patterns.
38
+ assert_eq ! ( detect_pat!( ( ! | true ) ) , Pattern ) ;
39
+ assert_eq ! ( detect_pat!( ( Ok ( x) | Err ( & !) ) ) , Pattern ) ;
40
+ }
Original file line number Diff line number Diff line change @@ -68,4 +68,9 @@ fn parse(x: Void) {
68
68
//~^ ERROR top-level or-patterns are not allowed in `let` bindings
69
69
let ( Ok ( _) | Err ( !) ) = & res;
70
70
let ( Ok ( _) | Err ( & !) ) = res. as_ref( ) ;
71
+
72
+ let ! = x;
73
+ let y @ ! = x;
71
74
}
75
+
76
+ fn foo( !: Void ) { }
You can’t perform that action at this time.
0 commit comments