rust/tests/ui/checked_conversions.fixed
Samuel Tardieu e3ec0d2de6
Check MSRV for any entity, not just function and method calls
New Rust releases also stabilize enum variants, constants, and so on.
Lint them as well.
2025-05-21 17:17:30 +02:00

108 lines
2.5 KiB
Rust

#![allow(
clippy::cast_lossless,
clippy::legacy_numeric_constants,
unused,
// Int::max_value will be deprecated in the future
deprecated,
)]
#![warn(clippy::checked_conversions)]
// Positive tests
// Signed to unsigned
pub fn i64_to_u32(value: i64) {
let _ = u32::try_from(value).is_ok();
//~^ checked_conversions
let _ = u32::try_from(value).is_ok();
//~^ checked_conversions
}
pub fn i64_to_u16(value: i64) {
let _ = u16::try_from(value).is_ok();
//~^ checked_conversions
let _ = u16::try_from(value).is_ok();
//~^ checked_conversions
}
pub fn isize_to_u8(value: isize) {
let _ = u8::try_from(value).is_ok();
//~^ checked_conversions
let _ = u8::try_from(value).is_ok();
//~^ checked_conversions
}
// Signed to signed
pub fn i64_to_i32(value: i64) {
let _ = i32::try_from(value).is_ok();
//~^ checked_conversions
let _ = i32::try_from(value).is_ok();
//~^ checked_conversions
}
pub fn i64_to_i16(value: i64) {
let _ = i16::try_from(value).is_ok();
//~^ checked_conversions
let _ = i16::try_from(value).is_ok();
//~^ checked_conversions
}
// Unsigned to X
pub fn u32_to_i32(value: u32) {
let _ = i32::try_from(value).is_ok();
//~^ checked_conversions
let _ = i32::try_from(value).is_ok();
//~^ checked_conversions
}
pub fn usize_to_isize(value: usize) {
let _ = isize::try_from(value).is_ok() && value as i32 == 5;
//~^ checked_conversions
let _ = isize::try_from(value).is_ok() && value as i32 == 5;
//~^ checked_conversions
}
pub fn u32_to_u16(value: u32) {
let _ = u16::try_from(value).is_ok() && value as i32 == 5;
//~^ checked_conversions
let _ = u16::try_from(value).is_ok() && value as i32 == 5;
//~^ checked_conversions
}
// Negative tests
pub fn no_i64_to_i32(value: i64) {
let _ = value <= (i32::max_value() as i64) && value >= 0;
let _ = value <= (i32::MAX as i64) && value >= 0;
}
pub fn no_isize_to_u8(value: isize) {
let _ = value <= (u8::max_value() as isize) && value >= (u8::min_value() as isize);
let _ = value <= (u8::MAX as isize) && value >= (u8::MIN as isize);
}
pub fn i8_to_u8(value: i8) {
let _ = value >= 0;
}
// Do not lint
pub const fn issue_8898(i: u32) -> bool {
i <= i32::MAX as u32
}
#[clippy::msrv = "1.33"]
fn msrv_1_33() {
let value: i64 = 33;
let _ = value <= (u32::max_value() as i64) && value >= 0;
}
#[clippy::msrv = "1.34"]
fn msrv_1_34() {
let value: i64 = 34;
let _ = u32::try_from(value).is_ok();
//~^ checked_conversions
}
fn main() {}