| //@ run-pass |
| // Test that codegen works correctly when there are multiple refutable |
| // patterns in match expression. |
| |
| enum Foo { |
| FooUint(usize), |
| FooNullary, |
| } |
| |
| fn main() { |
| let r = match (Foo::FooNullary, 'a') { |
| (Foo::FooUint(..), 'a'..='z') => 1, |
| (Foo::FooNullary, 'x') => 2, |
| _ => 0 |
| }; |
| assert_eq!(r, 0); |
| |
| let r = match (Foo::FooUint(0), 'a') { |
| (Foo::FooUint(1), 'a'..='z') => 1, |
| (Foo::FooUint(..), 'x') => 2, |
| (Foo::FooNullary, 'a') => 3, |
| _ => 0 |
| }; |
| assert_eq!(r, 0); |
| |
| let r = match ('a', Foo::FooUint(0)) { |
| ('a'..='z', Foo::FooUint(1)) => 1, |
| ('x', Foo::FooUint(..)) => 2, |
| ('a', Foo::FooNullary) => 3, |
| _ => 0 |
| }; |
| assert_eq!(r, 0); |
| |
| let r = match ('a', 'a') { |
| ('a'..='z', 'b') => 1, |
| ('x', 'a'..='z') => 2, |
| _ => 0 |
| }; |
| assert_eq!(r, 0); |
| |
| let r = match ('a', 'a') { |
| ('a'..='z', 'b') => 1, |
| ('x', 'a'..='z') => 2, |
| ('a', 'a') => 3, |
| _ => 0 |
| }; |
| assert_eq!(r, 3); |
| } |