| #![allow( | |
| clippy::cast_lossless, | |
| clippy::legacy_numeric_constants, | |
| clippy::no_effect, | |
| 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 issue16293() { | |
| struct Outer { | |
| inner: u32, | |
| } | |
| let outer = Outer { inner: 42 }; | |
| macro_rules! dot_inner { | |
| ($obj:expr) => { | |
| $obj.inner | |
| }; | |
| } | |
| i32::try_from(dot_inner!(outer)).is_ok(); | |
| //~^ checked_conversions | |
| } | |
| fn main() {} |