| #![warn(clippy::cast_lossless)] | |
| type U8 = u8; | |
| fn main() { | |
| // Test clippy::cast_lossless with casts to integer types | |
| let _ = u8::from(true); | |
| //~^ cast_lossless | |
| let _ = u16::from(true); | |
| //~^ cast_lossless | |
| let _ = u32::from(true); | |
| //~^ cast_lossless | |
| let _ = u64::from(true); | |
| //~^ cast_lossless | |
| let _ = u128::from(true); | |
| //~^ cast_lossless | |
| let _ = usize::from(true); | |
| //~^ cast_lossless | |
| let _ = i8::from(true); | |
| //~^ cast_lossless | |
| let _ = i16::from(true); | |
| //~^ cast_lossless | |
| let _ = i32::from(true); | |
| //~^ cast_lossless | |
| let _ = i64::from(true); | |
| //~^ cast_lossless | |
| let _ = i128::from(true); | |
| //~^ cast_lossless | |
| let _ = isize::from(true); | |
| //~^ cast_lossless | |
| // Test with an expression wrapped in parens | |
| let _ = u16::from(true | false); | |
| //~^ cast_lossless | |
| let _ = U8::from(true); | |
| //~^ cast_lossless | |
| } | |
| // The lint would suggest using `u32::from(input)` here but the `XX::from` function is not const, | |
| // so we skip the lint if the expression is in a const fn. | |
| // See #3656 | |
| const fn abc(input: bool) -> u32 { | |
| input as u32 | |
| } | |
| // Same as the above issue. We can't suggest `::from` in const fns in impls | |
| mod cast_lossless_in_impl { | |
| struct A; | |
| impl A { | |
| pub const fn convert(x: bool) -> u64 { | |
| x as u64 | |
| } | |
| } | |
| } | |
| #[clippy::msrv = "1.27"] | |
| fn msrv_1_27() { | |
| let _ = true as u8; | |
| } | |
| #[clippy::msrv = "1.28"] | |
| fn msrv_1_28() { | |
| let _ = u8::from(true); | |
| //~^ cast_lossless | |
| } |