@@ -66,7 +66,7 @@ use core::hash::{self, Hash};
6666use  core:: intrinsics:: { arith_offset,  assume} ; 
6767use  core:: iter:: { FromIterator ,  FusedIterator ,  TrustedLen } ; 
6868use  core:: marker:: PhantomData ; 
69- use  core:: mem; 
69+ use  core:: mem:: { self ,   ManuallyDrop } ; 
7070use  core:: ops:: Bound :: { Excluded ,  Included ,  Unbounded } ; 
7171use  core:: ops:: { self ,  Index ,  IndexMut ,  RangeBounds } ; 
7272use  core:: ptr:: { self ,  NonNull } ; 
@@ -392,7 +392,7 @@ impl<T> Vec<T> {
392392/// ``` 
393393#[ unstable( feature = "vec_into_raw_parts" ,  reason = "new API" ,  issue = "65816" ) ]  
394394    pub  fn  into_raw_parts ( self )  -> ( * mut  T ,  usize ,  usize )  { 
395-         let  mut  me = mem :: ManuallyDrop :: new ( self ) ; 
395+         let  mut  me = ManuallyDrop :: new ( self ) ; 
396396        ( me. as_mut_ptr ( ) ,  me. len ( ) ,  me. capacity ( ) ) 
397397    } 
398398
@@ -678,9 +678,9 @@ impl<T> Vec<T> {
678678    pub  fn  into_boxed_slice ( mut  self )  -> Box < [ T ] >  { 
679679        unsafe  { 
680680            self . shrink_to_fit ( ) ; 
681-             let  buf  = ptr :: read ( & self . buf ) ; 
682-             let  len  = self . len ( ) ; 
683-             mem :: forget ( self ) ; 
681+             let  me  = ManuallyDrop :: new ( self ) ; 
682+             let  buf  = ptr :: read ( & me . buf ) ; 
683+             let  len = me . len ( ) ; 
684684            buf. into_box ( len) . assume_init ( ) 
685685        } 
686686    } 
@@ -1949,16 +1949,16 @@ impl<T> IntoIterator for Vec<T> {
19491949/// } 
19501950/// ``` 
19511951#[ inline]  
1952-     fn  into_iter ( mut   self )  -> IntoIter < T >  { 
1952+     fn  into_iter ( self )  -> IntoIter < T >  { 
19531953        unsafe  { 
1954-             let  begin = self . as_mut_ptr ( ) ; 
1954+             let  mut  me = ManuallyDrop :: new ( self ) ; 
1955+             let  begin = me. as_mut_ptr ( ) ; 
19551956            let  end = if  mem:: size_of :: < T > ( )  == 0  { 
1956-                 arith_offset ( begin as  * const  i8 ,  self . len ( )  as  isize )  as  * const  T 
1957+                 arith_offset ( begin as  * const  i8 ,  me . len ( )  as  isize )  as  * const  T 
19571958            }  else  { 
1958-                 begin. add ( self . len ( ) )  as  * const  T 
1959+                 begin. add ( me . len ( ) )  as  * const  T 
19591960            } ; 
1960-             let  cap = self . buf . capacity ( ) ; 
1961-             mem:: forget ( self ) ; 
1961+             let  cap = me. buf . capacity ( ) ; 
19621962            IntoIter  { 
19631963                buf :  NonNull :: new_unchecked ( begin) , 
19641964                phantom :  PhantomData , 
@@ -2081,9 +2081,8 @@ impl<T> SpecExtend<T, IntoIter<T>> for Vec<T> {
20812081        // has not been advanced at all. 
20822082        if  iterator. buf . as_ptr ( )  as  * const  _  == iterator. ptr  { 
20832083            unsafe  { 
2084-                 let  vec = Vec :: from_raw_parts ( iterator. buf . as_ptr ( ) ,  iterator. len ( ) ,  iterator. cap ) ; 
2085-                 mem:: forget ( iterator) ; 
2086-                 vec
2084+                 let  it = ManuallyDrop :: new ( iterator) ; 
2085+                 Vec :: from_raw_parts ( it. buf . as_ptr ( ) ,  it. len ( ) ,  it. cap ) 
20872086            } 
20882087        }  else  { 
20892088            let  mut  vector = Vec :: new ( ) ; 
0 commit comments