@@ -252,10 +252,9 @@ mod if_alloc {
252252 where
253253 F : Future < Output = T > + ' a ,
254254 {
255- fn into_raw ( mut self ) -> * mut ( dyn Future < Output = T > + ' a ) {
256- let ptr = unsafe { self . as_mut ( ) . get_unchecked_mut ( ) as * mut _ } ;
257- mem:: forget ( self ) ;
258- ptr
255+ fn into_raw ( self ) -> * mut ( dyn Future < Output = T > + ' a ) {
256+ let mut this = mem:: ManuallyDrop :: new ( self ) ;
257+ unsafe { this. as_mut ( ) . get_unchecked_mut ( ) as * mut _ }
259258 }
260259
261260 unsafe fn drop ( ptr : * mut ( dyn Future < Output = T > + ' a ) ) {
@@ -264,10 +263,9 @@ mod if_alloc {
264263 }
265264
266265 unsafe impl < ' a , T : ' a > UnsafeFutureObj < ' a , T > for Pin < Box < dyn Future < Output = T > + ' a > > {
267- fn into_raw ( mut self ) -> * mut ( dyn Future < Output = T > + ' a ) {
268- let ptr = unsafe { self . as_mut ( ) . get_unchecked_mut ( ) as * mut _ } ;
269- mem:: forget ( self ) ;
270- ptr
266+ fn into_raw ( self ) -> * mut ( dyn Future < Output = T > + ' a ) {
267+ let mut this = mem:: ManuallyDrop :: new ( self ) ;
268+ unsafe { this. as_mut ( ) . get_unchecked_mut ( ) as * mut _ }
271269 }
272270
273271 unsafe fn drop ( ptr : * mut ( dyn Future < Output = T > + ' a ) ) {
@@ -276,10 +274,9 @@ mod if_alloc {
276274 }
277275
278276 unsafe impl < ' a , T : ' a > UnsafeFutureObj < ' a , T > for Pin < Box < dyn Future < Output = T > + Send + ' a > > {
279- fn into_raw ( mut self ) -> * mut ( dyn Future < Output = T > + ' a ) {
280- let ptr = unsafe { self . as_mut ( ) . get_unchecked_mut ( ) as * mut _ } ;
281- mem:: forget ( self ) ;
282- ptr
277+ fn into_raw ( self ) -> * mut ( dyn Future < Output = T > + ' a ) {
278+ let mut this = mem:: ManuallyDrop :: new ( self ) ;
279+ unsafe { this. as_mut ( ) . get_unchecked_mut ( ) as * mut _ }
283280 }
284281
285282 unsafe fn drop ( ptr : * mut ( dyn Future < Output = T > + ' a ) ) {
0 commit comments