]>
Commit | Line | Data |
---|---|---|
f20569fa XL |
1 | #![allow(dead_code)] |
2 | ||
3 | extern crate core; | |
4 | ||
5 | use std::mem::transmute as my_transmute; | |
6 | use std::vec::Vec as MyVec; | |
7 | ||
8 | fn my_int() -> Usize { | |
9 | Usize(42) | |
10 | } | |
11 | ||
12 | fn my_vec() -> MyVec<i32> { | |
13 | vec![] | |
14 | } | |
15 | ||
16 | #[allow(clippy::needless_lifetimes, clippy::transmute_ptr_to_ptr)] | |
17 | #[warn(clippy::useless_transmute)] | |
18 | unsafe fn _generic<'a, T, U: 'a>(t: &'a T) { | |
19 | let _: &'a T = core::intrinsics::transmute(t); | |
20 | ||
21 | let _: &'a U = core::intrinsics::transmute(t); | |
22 | ||
23 | let _: *const T = core::intrinsics::transmute(t); | |
24 | ||
25 | let _: *mut T = core::intrinsics::transmute(t); | |
26 | ||
27 | let _: *const U = core::intrinsics::transmute(t); | |
28 | } | |
29 | ||
30 | #[warn(clippy::useless_transmute)] | |
31 | fn useless() { | |
32 | unsafe { | |
33 | let _: Vec<i32> = core::intrinsics::transmute(my_vec()); | |
34 | ||
35 | let _: Vec<i32> = core::mem::transmute(my_vec()); | |
36 | ||
37 | let _: Vec<i32> = std::intrinsics::transmute(my_vec()); | |
38 | ||
39 | let _: Vec<i32> = std::mem::transmute(my_vec()); | |
40 | ||
41 | let _: Vec<i32> = my_transmute(my_vec()); | |
42 | ||
43 | let _: *const usize = std::mem::transmute(5_isize); | |
44 | ||
45 | let _ = 5_isize as *const usize; | |
46 | ||
47 | let _: *const usize = std::mem::transmute(1 + 1usize); | |
48 | ||
49 | let _ = (1 + 1_usize) as *const usize; | |
50 | } | |
51 | } | |
52 | ||
53 | struct Usize(usize); | |
54 | ||
55 | #[warn(clippy::crosspointer_transmute)] | |
56 | fn crosspointer() { | |
57 | let mut int: Usize = Usize(0); | |
58 | let int_const_ptr: *const Usize = &int as *const Usize; | |
59 | let int_mut_ptr: *mut Usize = &mut int as *mut Usize; | |
60 | ||
61 | unsafe { | |
62 | let _: Usize = core::intrinsics::transmute(int_const_ptr); | |
63 | ||
64 | let _: Usize = core::intrinsics::transmute(int_mut_ptr); | |
65 | ||
66 | let _: *const Usize = core::intrinsics::transmute(my_int()); | |
67 | ||
68 | let _: *mut Usize = core::intrinsics::transmute(my_int()); | |
69 | } | |
70 | } | |
71 | ||
72 | #[warn(clippy::transmute_int_to_char)] | |
73 | fn int_to_char() { | |
74 | let _: char = unsafe { std::mem::transmute(0_u32) }; | |
75 | let _: char = unsafe { std::mem::transmute(0_i32) }; | |
76 | } | |
77 | ||
78 | #[warn(clippy::transmute_int_to_bool)] | |
79 | fn int_to_bool() { | |
80 | let _: bool = unsafe { std::mem::transmute(0_u8) }; | |
81 | } | |
82 | ||
83 | #[warn(clippy::transmute_int_to_float)] | |
84 | mod int_to_float { | |
85 | fn test() { | |
86 | let _: f32 = unsafe { std::mem::transmute(0_u32) }; | |
87 | let _: f32 = unsafe { std::mem::transmute(0_i32) }; | |
88 | let _: f64 = unsafe { std::mem::transmute(0_u64) }; | |
89 | let _: f64 = unsafe { std::mem::transmute(0_i64) }; | |
90 | } | |
91 | ||
92 | mod issue_5747 { | |
93 | const VALUE32: f32 = unsafe { std::mem::transmute(0_u32) }; | |
94 | const VALUE64: f64 = unsafe { std::mem::transmute(0_i64) }; | |
95 | ||
96 | const fn from_bits_32(v: i32) -> f32 { | |
97 | unsafe { std::mem::transmute(v) } | |
98 | } | |
99 | ||
100 | const fn from_bits_64(v: u64) -> f64 { | |
101 | unsafe { std::mem::transmute(v) } | |
102 | } | |
103 | } | |
104 | } | |
105 | ||
106 | fn bytes_to_str(b: &[u8], mb: &mut [u8]) { | |
107 | let _: &str = unsafe { std::mem::transmute(b) }; | |
108 | let _: &mut str = unsafe { std::mem::transmute(mb) }; | |
109 | } | |
110 | ||
111 | fn main() {} |