blob: 93630faa1086df611b52f0be5717abd37dec2f5c [file] [log] [blame]
#![warn(clippy::manual_checked_ops)]
fn main() {
let mut a = 10u32;
let mut b = 5u32;
// Should trigger lint
if b != 0 {
//~^ manual_checked_ops
let _result = a / b;
let _another = (a + 1) / b;
}
// Should trigger lint (compound assignment)
if b != 0 {
//~^ manual_checked_ops
a /= b;
}
if b > 0 {
//~^ manual_checked_ops
let _result = a / b;
}
if b == 0 {
//~^ manual_checked_ops
println!("zero");
} else {
let _result = a / b;
}
// Should NOT trigger (already using checked_div)
if let Some(result) = b.checked_div(a) {
println!("{result}");
}
// Should NOT trigger (signed integers are not linted)
let c = -5i32;
if c != 0 {
let _result = 10 / c;
}
// Should NOT trigger (side effects in divisor)
if counter() > 0 {
let _ = 32 / counter();
}
// Should NOT trigger (divisor used before division)
if b > 0 {
use_value(b);
let _ = a / b;
}
// Should NOT trigger (divisor may change during evaluation)
if b > 0 {
g(inc_and_return_value(&mut b), a / b);
}
}
fn counter() -> u32 {
println!("counter");
1
}
fn use_value(_v: u32) {}
fn inc_and_return_value(x: &mut u32) -> u32 {
*x += 1;
*x
}
fn g(_lhs: u32, _rhs: u32) {}