1 use pin_project_lite::pin_project;
2 struct Struct<T, U> {
3 pinned1: T,
4 pinned2: T,
5 unpinned1: U,
6 unpinned2: U,
7 }
8 #[allow(dead_code)]
9 #[allow(single_use_lifetimes)]
10 #[allow(clippy::mut_mut)]
11 #[allow(clippy::redundant_pub_crate)]
12 #[allow(clippy::type_repetition_in_bounds)]
13 struct StructProjReplace<T, U> {
14 pinned1: ::pin_project_lite::__private::PhantomData<T>,
15 pinned2: ::pin_project_lite::__private::PhantomData<T>,
16 unpinned1: U,
17 unpinned2: U,
18 }
19 #[allow(explicit_outlives_requirements)]
20 #[allow(single_use_lifetimes)]
21 #[allow(clippy::unknown_clippy_lints)]
22 #[allow(clippy::redundant_pub_crate)]
23 #[allow(clippy::used_underscore_binding)]
24 const _: () = {
25 #[allow(dead_code)]
26 #[allow(single_use_lifetimes)]
27 #[allow(clippy::unknown_clippy_lints)]
28 #[allow(clippy::mut_mut)]
29 #[allow(clippy::redundant_pub_crate)]
30 #[allow(clippy::ref_option_ref)]
31 #[allow(clippy::type_repetition_in_bounds)]
32 struct Projection<'__pin, T, U>
33 where
34 Struct<T, U>: '__pin,
35 {
36 pinned1: ::pin_project_lite::__private::Pin<&'__pin mut (T)>,
37 pinned2: ::pin_project_lite::__private::Pin<&'__pin mut (T)>,
38 unpinned1: &'__pin mut (U),
39 unpinned2: &'__pin mut (U),
40 }
41 #[allow(dead_code)]
42 #[allow(single_use_lifetimes)]
43 #[allow(clippy::unknown_clippy_lints)]
44 #[allow(clippy::mut_mut)]
45 #[allow(clippy::redundant_pub_crate)]
46 #[allow(clippy::ref_option_ref)]
47 #[allow(clippy::type_repetition_in_bounds)]
48 struct ProjectionRef<'__pin, T, U>
49 where
50 Struct<T, U>: '__pin,
51 {
52 pinned1: ::pin_project_lite::__private::Pin<&'__pin (T)>,
53 pinned2: ::pin_project_lite::__private::Pin<&'__pin (T)>,
54 unpinned1: &'__pin (U),
55 unpinned2: &'__pin (U),
56 }
57 impl<T, U> Struct<T, U> {
project<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin mut Self>, ) -> Projection<'__pin, T, U>58 fn project<'__pin>(
59 self: ::pin_project_lite::__private::Pin<&'__pin mut Self>,
60 ) -> Projection<'__pin, T, U> {
61 unsafe {
62 let Self {
63 pinned1,
64 pinned2,
65 unpinned1,
66 unpinned2,
67 } = self.get_unchecked_mut();
68 Projection {
69 pinned1: ::pin_project_lite::__private::Pin::new_unchecked(pinned1),
70 pinned2: ::pin_project_lite::__private::Pin::new_unchecked(pinned2),
71 unpinned1: unpinned1,
72 unpinned2: unpinned2,
73 }
74 }
75 }
project_ref<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin Self>, ) -> ProjectionRef<'__pin, T, U>76 fn project_ref<'__pin>(
77 self: ::pin_project_lite::__private::Pin<&'__pin Self>,
78 ) -> ProjectionRef<'__pin, T, U> {
79 unsafe {
80 let Self {
81 pinned1,
82 pinned2,
83 unpinned1,
84 unpinned2,
85 } = self.get_ref();
86 ProjectionRef {
87 pinned1: ::pin_project_lite::__private::Pin::new_unchecked(pinned1),
88 pinned2: ::pin_project_lite::__private::Pin::new_unchecked(pinned2),
89 unpinned1: unpinned1,
90 unpinned2: unpinned2,
91 }
92 }
93 }
project_replace( self: ::pin_project_lite::__private::Pin<&mut Self>, replacement: Self, ) -> StructProjReplace<T, U>94 fn project_replace(
95 self: ::pin_project_lite::__private::Pin<&mut Self>,
96 replacement: Self,
97 ) -> StructProjReplace<T, U> {
98 unsafe {
99 let __self_ptr: *mut Self = self.get_unchecked_mut();
100 let __guard = ::pin_project_lite::__private::UnsafeOverwriteGuard::new(
101 __self_ptr,
102 replacement,
103 );
104 let Self {
105 pinned1,
106 pinned2,
107 unpinned1,
108 unpinned2,
109 } = &mut *__self_ptr;
110 let result = StructProjReplace {
111 pinned1: ::pin_project_lite::__private::PhantomData,
112 pinned2: ::pin_project_lite::__private::PhantomData,
113 unpinned1: ::pin_project_lite::__private::ptr::read(unpinned1),
114 unpinned2: ::pin_project_lite::__private::ptr::read(unpinned2),
115 };
116 {
117 (
118 ::pin_project_lite::__private::UnsafeDropInPlaceGuard::new(pinned1),
119 ::pin_project_lite::__private::UnsafeDropInPlaceGuard::new(pinned2),
120 (),
121 (),
122 );
123 }
124 result
125 }
126 }
127 }
128 #[allow(non_snake_case)]
129 struct __Origin<'__pin, T, U> {
130 __dummy_lifetime: ::pin_project_lite::__private::PhantomData<&'__pin ()>,
131 pinned1: T,
132 pinned2: T,
133 unpinned1: ::pin_project_lite::__private::AlwaysUnpin<U>,
134 unpinned2: ::pin_project_lite::__private::AlwaysUnpin<U>,
135 }
136 impl<'__pin, T, U> ::pin_project_lite::__private::Unpin for Struct<T, U> where
137 __Origin<'__pin, T, U>: ::pin_project_lite::__private::Unpin
138 {
139 }
140 trait MustNotImplDrop {}
141 #[allow(clippy::drop_bounds, drop_bounds)]
142 impl<T: ::pin_project_lite::__private::Drop> MustNotImplDrop for T {}
143 impl<T, U> MustNotImplDrop for Struct<T, U> {}
144 #[forbid(unaligned_references, safe_packed_borrows)]
__assert_not_repr_packed<T, U>(this: &Struct<T, U>)145 fn __assert_not_repr_packed<T, U>(this: &Struct<T, U>) {
146 let _ = &this.pinned1;
147 let _ = &this.pinned2;
148 let _ = &this.unpinned1;
149 let _ = &this.unpinned2;
150 }
151 };
main()152 fn main() {}
153