1 #![feature(tool_lints)]
2 #![feature(exclusive_range_pattern)]
6 #![allow(unused, clippy::if_let_redundant_pattern_matching)]
7 #![warn(clippy::single_match_else, clippy::match_same_arms)]
15 static NODE: ExprNode = ExprNode::Unicorns;
20 fn unwrap_addr() -> Option<&'static ExprNode> {
21 match ExprNode::Butterflies {
22 ExprNode::ExprAddrOf => Some(&NODE),
23 _ => { let x = 5; None },
31 &Some(v) => println!("{:?}", v),
32 &None => println!("none"),
34 match v { // this doesn't trigger, we have a different pattern
35 &Some(v) => println!("some"),
36 other => println!("other"),
41 &(v, 1) => println!("{}", v),
42 _ => println!("none"),
44 // special case: using & both in expr and pats
47 &Some(v) => println!("{:?}", v),
48 &None => println!("none"),
50 // false positive: only wildcard pattern
53 _ => println!("none"),
71 0 ... 10 => println!("0 ... 10"),
72 0 ... 11 => println!("0 ... 11"),
77 0 ... 5 => println!("0 ... 5"),
78 6 ... 7 => println!("6 ... 7"),
79 FOO ... 11 => println!("0 ... 11"),
85 0 ... 5 => println!("0 ... 5"),
91 0 ... 2 => println!("0 ... 2"),
96 0 ... 10 => println!("0 ... 10"),
97 11 ... 50 => println!("11 ... 50"),
103 0 .. 2 => println!("0 .. 2"),
108 0 .. 10 => println!("0 .. 10"),
109 10 .. 50 => println!("10 .. 50"),
114 0 .. 11 => println!("0 .. 11"),
115 0 ... 11 => println!("0 ... 11"),
119 if let None = Some(42) {
121 } else if let None = Some(42) {
122 // another nothing :-)
126 fn match_wild_err_arm() {
127 let x: Result<i32, &str> = Ok(3);
130 Ok(3) => println!("ok"),
131 Ok(_) => println!("ok"),
132 Err(_) => panic!("err")
136 Ok(3) => println!("ok"),
137 Ok(_) => println!("ok"),
142 Ok(3) => println!("ok"),
143 Ok(_) => println!("ok"),
144 Err(_) => {panic!();}
147 // allowed when not with `panic!` block
149 Ok(3) => println!("ok"),
150 Ok(_) => println!("ok"),
151 Err(_) => println!("err")
154 // allowed when used with `unreachable!`
156 Ok(3) => println!("ok"),
157 Ok(_) => println!("ok"),
158 Err(_) => {unreachable!()}
162 Ok(3) => println!("ok"),
163 Ok(_) => println!("ok"),
164 Err(_) => unreachable!()
168 Ok(3) => println!("ok"),
169 Ok(_) => println!("ok"),
170 Err(_) => {unreachable!();}
173 // no warning because of the guard
175 Ok(x) if x*x == 64 => println!("ok"),
176 Ok(_) => println!("ok"),
177 Err(_) => println!("err")
180 // this used to be a false positive, see #1996
182 Ok(3) => println!("ok"),
183 Ok(x) if x*x == 64 => println!("ok 64"),
184 Ok(_) => println!("ok"),
185 Err(_) => println!("err")
188 match (x, Some(1i32)) {
189 (Ok(x), Some(_)) => println!("ok {}", x),
190 (Ok(_), Some(x)) => println!("ok {}", x),
194 // no warning because of the different types for x
195 match (x, Some(1.0f64)) {
196 (Ok(x), Some(_)) => println!("ok {}", x),
197 (Ok(_), Some(x)) => println!("ok {}", x),
201 // because of a bug, no warning was generated for this case before #2251
203 Ok(_tmp) => println!("ok"),
204 Ok(3) => println!("ok"),
205 Ok(_) => println!("ok"),
206 Err(_) => {unreachable!();}
211 let owned: Option<()> = None;
212 let borrowed: Option<&()> = match owned {
214 Some(ref v) => Some(v),
217 let mut mut_owned: Option<()> = None;
218 let borrow_mut: Option<&mut ()> = match mut_owned {
220 Some(ref mut v) => Some(v),