]>
Commit | Line | Data |
---|---|---|
064997fb FG |
1 | // run-rustfix |
2 | ||
3 | #![feature(custom_inner_attributes)] | |
f20569fa | 4 | #![warn(clippy::transmute_ptr_to_ref)] |
064997fb | 5 | #![allow(clippy::match_single_binding)] |
f20569fa XL |
6 | |
7 | unsafe fn _ptr_to_ref<T, U>(p: *const T, m: *mut T, o: *const U, om: *mut U) { | |
8 | let _: &T = std::mem::transmute(p); | |
9 | let _: &T = &*p; | |
10 | ||
11 | let _: &mut T = std::mem::transmute(m); | |
12 | let _: &mut T = &mut *m; | |
13 | ||
14 | let _: &T = std::mem::transmute(m); | |
15 | let _: &T = &*m; | |
16 | ||
17 | let _: &mut T = std::mem::transmute(p as *mut T); | |
18 | let _ = &mut *(p as *mut T); | |
19 | ||
20 | let _: &T = std::mem::transmute(o); | |
21 | let _: &T = &*(o as *const T); | |
22 | ||
23 | let _: &mut T = std::mem::transmute(om); | |
24 | let _: &mut T = &mut *(om as *mut T); | |
25 | ||
26 | let _: &T = std::mem::transmute(om); | |
27 | let _: &T = &*(om as *const T); | |
28 | } | |
29 | ||
064997fb | 30 | fn _issue1231() { |
f20569fa XL |
31 | struct Foo<'a, T> { |
32 | bar: &'a T, | |
33 | } | |
34 | ||
35 | let raw = 42 as *const i32; | |
36 | let _: &Foo<u8> = unsafe { std::mem::transmute::<_, &Foo<_>>(raw) }; | |
37 | ||
38 | let _: &Foo<&u8> = unsafe { std::mem::transmute::<_, &Foo<&_>>(raw) }; | |
39 | ||
40 | type Bar<'a> = &'a u8; | |
41 | let raw = 42 as *const i32; | |
42 | unsafe { std::mem::transmute::<_, Bar>(raw) }; | |
43 | } | |
44 | ||
064997fb FG |
45 | unsafe fn _issue8924<'a, 'b, 'c>(x: *const &'a u32, y: *const &'b u32) -> &'c &'b u32 { |
46 | match 0 { | |
47 | 0 => std::mem::transmute(x), | |
48 | 1 => std::mem::transmute(y), | |
49 | 2 => std::mem::transmute::<_, &&'b u32>(x), | |
50 | _ => std::mem::transmute::<_, &&'b u32>(y), | |
51 | } | |
52 | } | |
53 | ||
54 | unsafe fn _meets_msrv<'a, 'b, 'c>(x: *const &'a u32) -> &'c &'b u32 { | |
55 | #![clippy::msrv = "1.38"] | |
56 | let a = 0u32; | |
57 | let a = &a as *const u32; | |
58 | let _: &u32 = std::mem::transmute(a); | |
59 | let _: &u32 = std::mem::transmute::<_, &u32>(a); | |
60 | match 0 { | |
61 | 0 => std::mem::transmute(x), | |
62 | _ => std::mem::transmute::<_, &&'b u32>(x), | |
63 | } | |
64 | } | |
65 | ||
66 | unsafe fn _under_msrv<'a, 'b, 'c>(x: *const &'a u32) -> &'c &'b u32 { | |
67 | #![clippy::msrv = "1.37"] | |
68 | let a = 0u32; | |
69 | let a = &a as *const u32; | |
70 | let _: &u32 = std::mem::transmute(a); | |
71 | let _: &u32 = std::mem::transmute::<_, &u32>(a); | |
72 | match 0 { | |
73 | 0 => std::mem::transmute(x), | |
74 | _ => std::mem::transmute::<_, &&'b u32>(x), | |
75 | } | |
76 | } | |
77 | ||
f20569fa | 78 | fn main() {} |