Consider literal patterns in MATCH_OVERLAPPING_ARM

This commit is contained in:
mcarton 2015-12-23 02:06:18 +01:00
parent 7216e83189
commit 3373ea43c0
2 changed files with 14 additions and 1 deletions

View File

@ -225,6 +225,13 @@ fn all_ranges(cx: &LateContext, arms: &[Arm]) -> Vec<SpannedRange<ConstVal>> {
return Some(SpannedRange { span: pat.span, node: (lhs, rhs) });
}}
if_let_chain! {[
let PatLit(ref value) = pat.node,
let Ok(value) = eval_const_expr_partial(cx.tcx, &value, ExprTypeChecked, None)
], {
return Some(SpannedRange { span: pat.span, node: (value.clone(), value) });
}}
None
}))
}

View File

@ -125,12 +125,18 @@ fn overlapping() {
}
match 42 {
0 ... 5 => println!("0 ... 10"), //~ERROR
0 ... 5 => println!("0 ... 5"), //~ERROR
6 ... 7 => println!("6 ... 7"),
FOO ... 11 => println!("0 ... 10"),
_ => (),
}
match 42 {
2 => println!("2"),
0 ... 5 => println!("0 ... 5"), //~ERROR
_ => (),
}
match 42 {
0 ... 10 => println!("0 ... 10"),
11 ... 50 => println!("0 ... 10"),