]>
Commit | Line | Data |
---|---|---|
1 | #![allow(clippy::no_effect, clippy::unnecessary_operation, dead_code)] | |
2 | #![warn(clippy::cast_lossless)] | |
3 | ||
4 | type I64 = i64; | |
5 | type U128 = u128; | |
6 | ||
7 | fn main() { | |
8 | // Test clippy::cast_lossless with casts to integer types | |
9 | let _ = 1i8 as i16; | |
10 | let _ = 1i8 as i32; | |
11 | let _ = 1i8 as i64; | |
12 | let _ = 1u8 as i16; | |
13 | let _ = 1u8 as i32; | |
14 | let _ = 1u8 as i64; | |
15 | let _ = 1u8 as u16; | |
16 | let _ = 1u8 as u32; | |
17 | let _ = 1u8 as u64; | |
18 | let _ = 1i16 as i32; | |
19 | let _ = 1i16 as i64; | |
20 | let _ = 1u16 as i32; | |
21 | let _ = 1u16 as i64; | |
22 | let _ = 1u16 as u32; | |
23 | let _ = 1u16 as u64; | |
24 | let _ = 1i32 as i64; | |
25 | let _ = 1u32 as i64; | |
26 | let _ = 1u32 as u64; | |
27 | ||
28 | // Test with an expression wrapped in parens | |
29 | let _ = (1u8 + 1u8) as u16; | |
30 | ||
31 | let _ = 1i8 as I64; | |
32 | ||
33 | // Do not lint if destination type is u128 | |
34 | // see https://github.com/rust-lang/rust-clippy/issues/12492 | |
35 | let _ = 1u8 as u128; | |
36 | let _ = 1u8 as U128; | |
37 | } | |
38 | ||
39 | // The lint would suggest using `f64::from(input)` here but the `XX::from` function is not const, | |
40 | // so we skip the lint if the expression is in a const fn. | |
41 | // See #3656 | |
42 | const fn abc(input: u16) -> u32 { | |
43 | input as u32 | |
44 | } | |
45 | ||
46 | // Same as the above issue. We can't suggest `::from` in const fns in impls | |
47 | mod cast_lossless_in_impl { | |
48 | struct A; | |
49 | ||
50 | impl A { | |
51 | pub const fn convert(x: u32) -> u64 { | |
52 | x as u64 | |
53 | } | |
54 | } | |
55 | } | |
56 | ||
57 | #[derive(PartialEq, Debug)] | |
58 | #[repr(i64)] | |
59 | enum Test { | |
60 | A = u32::MAX as i64 + 1, | |
61 | } | |
62 | ||
63 | fn issue11458() { | |
64 | macro_rules! sign_cast { | |
65 | ($var: ident, $src: ty, $dest: ty) => { | |
66 | <$dest>::from_ne_bytes(($var as $src).to_ne_bytes()) | |
67 | }; | |
68 | } | |
69 | let x = 10_u128; | |
70 | let _ = sign_cast!(x, u8, i8) as i32; | |
71 | let _ = (sign_cast!(x, u8, i8) + 1) as i32; | |
72 | } |