1 #![feature(exclusive_range_pattern)]
3 #![allow(unused, clippy::redundant_pattern_matching, clippy::too_many_lines)]
4 #![warn(clippy::match_same_arms)]
12 &Some(v) => println!("{:?}", v),
13 &None => println!("none"),
16 // This doesn't trigger; we have a different pattern.
17 &Some(v) => println!("some"),
18 other => println!("other"),
23 &(v, 1) => println!("{}", v),
24 _ => println!("none"),
26 // Special case: using `&` both in expr and pats.
29 &Some(v) => println!("{:?}", v),
30 &None => println!("none"),
32 // False positive: only wildcard pattern.
35 _ => println!("none"),
49 fn match_wild_err_arm() {
50 let x: Result<i32, &str> = Ok(3);
53 Ok(3) => println!("ok"),
54 Ok(_) => println!("ok"),
55 Err(_) => panic!("err"),
59 Ok(3) => println!("ok"),
60 Ok(_) => println!("ok"),
65 Ok(3) => println!("ok"),
66 Ok(_) => println!("ok"),
72 // Allowed when not with `panic!` block.
74 Ok(3) => println!("ok"),
75 Ok(_) => println!("ok"),
76 Err(_) => println!("err"),
79 // Allowed when used with `unreachable!`.
81 Ok(3) => println!("ok"),
82 Ok(_) => println!("ok"),
83 Err(_) => unreachable!(),
87 Ok(3) => println!("ok"),
88 Ok(_) => println!("ok"),
89 Err(_) => unreachable!(),
93 Ok(3) => println!("ok"),
94 Ok(_) => println!("ok"),
100 // No warning because of the guard.
102 Ok(x) if x * x == 64 => println!("ok"),
103 Ok(_) => println!("ok"),
104 Err(_) => println!("err"),
107 // This used to be a false positive; see issue #1996.
109 Ok(3) => println!("ok"),
110 Ok(x) if x * x == 64 => println!("ok 64"),
111 Ok(_) => println!("ok"),
112 Err(_) => println!("err"),
115 match (x, Some(1i32)) {
116 (Ok(x), Some(_)) => println!("ok {}", x),
117 (Ok(_), Some(x)) => println!("ok {}", x),
118 _ => println!("err"),
121 // No warning; different types for `x`.
122 match (x, Some(1.0f64)) {
123 (Ok(x), Some(_)) => println!("ok {}", x),
124 (Ok(_), Some(x)) => println!("ok {}", x),
125 _ => println!("err"),
128 // Because of a bug, no warning was generated for this case before #2251.
130 Ok(_tmp) => println!("ok"),
131 Ok(3) => println!("ok"),
132 Ok(_) => println!("ok"),
139 macro_rules! foo_variant(
140 ($idx:expr) => (Foo::get($idx).unwrap())
149 fn get(idx: u8) -> Option<&'static Self> {
160 match foo_variant!(0) {
161 &Foo::A => println!("A"),
162 _ => println!("Wild"),