]> git.proxmox.com Git - rustc.git/blame - src/tools/clippy/tests/ui/transmute.rs
New upstream version 1.56.0~beta.4+dfsg1
[rustc.git] / src / tools / clippy / tests / ui / transmute.rs
CommitLineData
f20569fa
XL
1#![allow(dead_code)]
2
3extern crate core;
4
5use std::mem::transmute as my_transmute;
6use std::vec::Vec as MyVec;
7
8fn my_int() -> Usize {
9 Usize(42)
10}
11
12fn my_vec() -> MyVec<i32> {
13 vec![]
14}
15
16#[allow(clippy::needless_lifetimes, clippy::transmute_ptr_to_ptr)]
17#[warn(clippy::useless_transmute)]
18unsafe 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)]
31fn 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
53struct Usize(usize);
54
55#[warn(clippy::crosspointer_transmute)]
56fn 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)]
73fn 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)]
79fn int_to_bool() {
80 let _: bool = unsafe { std::mem::transmute(0_u8) };
81}
82
83#[warn(clippy::transmute_int_to_float)]
84mod 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
106fn 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
111fn main() {}