Skip to content

Commit 693df63

Browse files
author
Michael Wright
committed
Ensure match_overlapping_arms warns on first
1 parent c3d4577 commit 693df63

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

clippy_lints/src/matches.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,10 +1761,17 @@ where
17611761
match value {
17621762
Kind::Start(_, r) => started.push(r),
17631763
Kind::End(_, er) => {
1764-
if let Some(sr) = started.pop() {
1765-
if sr != er {
1766-
return Some((er, sr));
1764+
let mut overlap = None;
1765+
1766+
while let Some(sr) = started.pop() {
1767+
if sr == er {
1768+
break;
17671769
}
1770+
overlap = Some(sr);
1771+
}
1772+
1773+
if let Some(sr) = overlap {
1774+
return Some((er, sr));
17681775
}
17691776
},
17701777
}

tests/ui/match_overlapping_arm.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,15 @@ fn overlapping() {
116116
_ => (),
117117
}
118118

119+
// Only warn about the first if there are multiple overlaps
120+
match 42u128 {
121+
0..=0x0000_0000_0000_00ff => (),
122+
0..=0x0000_0000_0000_ffff => (),
123+
0..=0x0000_0000_ffff_ffff => (),
124+
0..=0xffff_ffff_ffff_ffff => (),
125+
_ => (),
126+
}
127+
119128
if let None = Some(42) {
120129
// nothing
121130
} else if let None = Some(42) {

tests/ui/match_overlapping_arm.stderr

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,17 @@ note: overlaps with this
8383
LL | 21..=40 => (),
8484
| ^^^^^^^
8585

86-
error: aborting due to 7 previous errors
86+
error: some ranges overlap
87+
--> $DIR/match_overlapping_arm.rs:121:9
88+
|
89+
LL | 0..=0x0000_0000_0000_00ff => (),
90+
| ^^^^^^^^^^^^^^^^^^^^^^^^^
91+
|
92+
note: overlaps with this
93+
--> $DIR/match_overlapping_arm.rs:122:9
94+
|
95+
LL | 0..=0x0000_0000_0000_ffff => (),
96+
| ^^^^^^^^^^^^^^^^^^^^^^^^^
97+
98+
error: aborting due to 8 previous errors
8799

0 commit comments

Comments
 (0)