diff --git a/clippy_lints/src/methods/map_with_unused_argument_over_ranges.rs b/clippy_lints/src/methods/map_with_unused_argument_over_ranges.rs index de4eb1617809..21c0a5526d8d 100644 --- a/clippy_lints/src/methods/map_with_unused_argument_over_ranges.rs +++ b/clippy_lints/src/methods/map_with_unused_argument_over_ranges.rs @@ -33,7 +33,7 @@ fn extract_count_with_applicability( let count = if upper_bound >= lower_bound { match range.limits { RangeLimits::HalfOpen => upper_bound - lower_bound, - RangeLimits::Closed => upper_bound - lower_bound + 1, + RangeLimits::Closed => (upper_bound - lower_bound).checked_add(1)?, } } else { 0 diff --git a/tests/ui/map_with_unused_argument_over_ranges.fixed b/tests/ui/map_with_unused_argument_over_ranges.fixed index 48bb22be010b..822c54f8c14e 100644 --- a/tests/ui/map_with_unused_argument_over_ranges.fixed +++ b/tests/ui/map_with_unused_argument_over_ranges.fixed @@ -53,6 +53,8 @@ fn main() { (lower_fn()..=upper_fn()).map(|_| do_something()); // Ranges not starting at zero not yet handled (0..10).map(|x| do_something_interesting(x, 4)); // Actual map over range "Foobar".chars().map(|_| do_something()); // Not a map over range + // i128::MAX == 340282366920938463463374607431768211455 + (0..=340282366920938463463374607431768211455).map(|_: u128| do_something()); // Can't be replaced due to overflow } #[clippy::msrv = "1.27"] diff --git a/tests/ui/map_with_unused_argument_over_ranges.rs b/tests/ui/map_with_unused_argument_over_ranges.rs index a265ecfb0af2..ddcc73634161 100644 --- a/tests/ui/map_with_unused_argument_over_ranges.rs +++ b/tests/ui/map_with_unused_argument_over_ranges.rs @@ -53,6 +53,8 @@ fn main() { (lower_fn()..=upper_fn()).map(|_| do_something()); // Ranges not starting at zero not yet handled (0..10).map(|x| do_something_interesting(x, 4)); // Actual map over range "Foobar".chars().map(|_| do_something()); // Not a map over range + // i128::MAX == 340282366920938463463374607431768211455 + (0..=340282366920938463463374607431768211455).map(|_: u128| do_something()); // Can't be replaced due to overflow } #[clippy::msrv = "1.27"] diff --git a/tests/ui/map_with_unused_argument_over_ranges.stderr b/tests/ui/map_with_unused_argument_over_ranges.stderr index 9f49ef19f128..c63317f6d0e3 100644 --- a/tests/ui/map_with_unused_argument_over_ranges.stderr +++ b/tests/ui/map_with_unused_argument_over_ranges.stderr @@ -197,7 +197,7 @@ LL + std::iter::repeat_with(|| do_something()).take((1 << 4) - 0); | error: map of a closure that does not depend on its parameter over a range - --> tests/ui/map_with_unused_argument_over_ranges.rs:65:5 + --> tests/ui/map_with_unused_argument_over_ranges.rs:67:5 | LL | (0..10).map(|_| do_something()); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^