1 #![feature(exclusive_range_pattern)]
3 #![allow(unused, clippy::redundant_pattern_matching)]
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 #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 because of the 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"),
140 let owned: Option<()> = None;
141 let borrowed: Option<&()> = match owned {
143 Some(ref v) => Some(v),
146 let mut mut_owned: Option<()> = None;
147 let borrow_mut: Option<&mut ()> = match mut_owned {
149 Some(ref mut v) => Some(v),