1 #![allow(dead_code, clippy::borrow_as_ptr)]
5 use std::mem::transmute as my_transmute;
6 use std::vec::Vec as MyVec;
12 fn my_vec() -> MyVec<i32> {
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) {
20 // let _: &'a T = core::intrinsics::transmute(t);
22 let _: &'a U = core::intrinsics::transmute(t);
24 let _: *const T = core::intrinsics::transmute(t);
26 let _: *mut T = core::intrinsics::transmute(t);
28 let _: *const U = core::intrinsics::transmute(t);
31 #[warn(clippy::useless_transmute)]
34 let _: Vec<i32> = core::intrinsics::transmute(my_vec());
36 let _: Vec<i32> = core::mem::transmute(my_vec());
38 let _: Vec<i32> = std::intrinsics::transmute(my_vec());
40 let _: Vec<i32> = std::mem::transmute(my_vec());
42 let _: Vec<i32> = my_transmute(my_vec());
44 let _: *const usize = std::mem::transmute(5_isize);
46 let _ = 5_isize as *const usize;
48 let _: *const usize = std::mem::transmute(1 + 1usize);
50 let _ = (1 + 1_usize) as *const usize;
53 unsafe fn _f<'a, 'b>(x: &'a u32) -> &'b u32 {
54 std::mem::transmute(x)
57 unsafe fn _f2<'a, 'b>(x: *const (dyn Iterator<Item = u32> + 'a)) -> *const (dyn Iterator<Item = u32> + 'b) {
58 std::mem::transmute(x)
61 unsafe fn _f3<'a, 'b>(x: fn(&'a u32)) -> fn(&'b u32) {
62 std::mem::transmute(x)
65 unsafe fn _f4<'a, 'b>(x: std::borrow::Cow<'a, str>) -> std::borrow::Cow<'b, str> {
66 std::mem::transmute(x)
72 #[warn(clippy::crosspointer_transmute)]
74 let mut int: Usize = Usize(0);
75 let int_const_ptr: *const Usize = &int as *const Usize;
76 let int_mut_ptr: *mut Usize = &mut int as *mut Usize;
79 let _: Usize = core::intrinsics::transmute(int_const_ptr);
81 let _: Usize = core::intrinsics::transmute(int_mut_ptr);
83 let _: *const Usize = core::intrinsics::transmute(my_int());
85 let _: *mut Usize = core::intrinsics::transmute(my_int());
89 #[warn(clippy::transmute_int_to_char)]
91 let _: char = unsafe { std::mem::transmute(0_u32) };
92 let _: char = unsafe { std::mem::transmute(0_i32) };
94 // These shouldn't warn
95 const _: char = unsafe { std::mem::transmute(0_u32) };
96 const _: char = unsafe { std::mem::transmute(0_i32) };
99 #[warn(clippy::transmute_int_to_bool)]
101 let _: bool = unsafe { std::mem::transmute(0_u8) };
104 #[warn(clippy::transmute_int_to_float)]
107 let _: f32 = unsafe { std::mem::transmute(0_u32) };
108 let _: f32 = unsafe { std::mem::transmute(0_i32) };
109 let _: f64 = unsafe { std::mem::transmute(0_u64) };
110 let _: f64 = unsafe { std::mem::transmute(0_i64) };
114 const VALUE32: f32 = unsafe { std::mem::transmute(0_u32) };
115 const VALUE64: f64 = unsafe { std::mem::transmute(0_i64) };
117 const fn from_bits_32(v: i32) -> f32 {
118 unsafe { std::mem::transmute(v) }
121 const fn from_bits_64(v: u64) -> f64 {
122 unsafe { std::mem::transmute(v) }
130 let _: [u8; 1] = std::mem::transmute(0u8);
131 let _: [u8; 4] = std::mem::transmute(0u32);
132 let _: [u8; 16] = std::mem::transmute(0u128);
133 let _: [u8; 1] = std::mem::transmute(0i8);
134 let _: [u8; 4] = std::mem::transmute(0i32);
135 let _: [u8; 16] = std::mem::transmute(0i128);
136 let _: [u8; 4] = std::mem::transmute(0.0f32);
137 let _: [u8; 8] = std::mem::transmute(0.0f64);
140 const fn test_const() {
142 let _: [u8; 1] = std::mem::transmute(0u8);
143 let _: [u8; 4] = std::mem::transmute(0u32);
144 let _: [u8; 16] = std::mem::transmute(0u128);
145 let _: [u8; 1] = std::mem::transmute(0i8);
146 let _: [u8; 4] = std::mem::transmute(0i32);
147 let _: [u8; 16] = std::mem::transmute(0i128);
148 let _: [u8; 4] = std::mem::transmute(0.0f32);
149 let _: [u8; 8] = std::mem::transmute(0.0f64);
154 fn bytes_to_str(mb: &mut [u8]) {
155 const B: &[u8] = b"";
157 let _: &str = unsafe { std::mem::transmute(B) };
158 let _: &mut str = unsafe { std::mem::transmute(mb) };
159 const _: &str = unsafe { std::mem::transmute(B) };