Skip to content

Commit 06123fe

Browse files
committed
only bail if LHS min & RHS -1 when op is div or rem
1 parent a7c8ed3 commit 06123fe

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

clippy_utils/src/consts.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,10 @@ impl<'a, 'tcx> ConstEvalLateContext<'a, 'tcx> {
639639

640640
// Using / or %, where the left-hand argument is the smallest integer of a signed integer type and
641641
// the right-hand argument is -1 always panics, even with overflow-checks disabled
642-
if l == ty_min_value && r == -1 {
642+
if let BinOpKind::Div | BinOpKind::Rem = op.node
643+
&& l == ty_min_value
644+
&& r == -1
645+
{
643646
return None;
644647
}
645648

tests/ui/unnecessary_lazy_eval.fixed

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,8 @@ fn panicky_arithmetic_ops(x: usize) {
214214
let _x = false.then(|| 255u8 >> 8); // don't lint
215215
let _x = false.then(|| 255u8 >> x); // don't lint
216216
let _x = false.then(|| i32::MIN / -1); // don't lint
217+
let _x = false.then_some(i32::MAX + -1);
218+
//~^ ERROR: unnecessary closure used with `bool::then`
217219
let _x = false.then_some(-i32::MAX);
218220
//~^ ERROR: unnecessary closure used with `bool::then`
219221
let _x = false.then(|| -i32::MIN); // don't lint

tests/ui/unnecessary_lazy_eval.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,8 @@ fn panicky_arithmetic_ops(x: usize) {
214214
let _x = false.then(|| 255u8 >> 8); // don't lint
215215
let _x = false.then(|| 255u8 >> x); // don't lint
216216
let _x = false.then(|| i32::MIN / -1); // don't lint
217+
let _x = false.then(|| i32::MAX + -1);
218+
//~^ ERROR: unnecessary closure used with `bool::then`
217219
let _x = false.then(|| -i32::MAX);
218220
//~^ ERROR: unnecessary closure used with `bool::then`
219221
let _x = false.then(|| -i32::MIN); // don't lint

tests/ui/unnecessary_lazy_eval.stderr

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,10 +339,18 @@ LL | let _x = false.then(|| 255u8 << 7);
339339
error: unnecessary closure used with `bool::then`
340340
--> $DIR/unnecessary_lazy_eval.rs:217:14
341341
|
342+
LL | let _x = false.then(|| i32::MAX + -1);
343+
| ^^^^^^----------------------
344+
| |
345+
| help: use `then_some(..)` instead: `then_some(i32::MAX + -1)`
346+
347+
error: unnecessary closure used with `bool::then`
348+
--> $DIR/unnecessary_lazy_eval.rs:219:14
349+
|
342350
LL | let _x = false.then(|| -i32::MAX);
343351
| ^^^^^^------------------
344352
| |
345353
| help: use `then_some(..)` instead: `then_some(-i32::MAX)`
346354

347-
error: aborting due to 42 previous errors
355+
error: aborting due to 43 previous errors
348356

0 commit comments

Comments
 (0)