@@ -4,7 +4,6 @@ use crate::alloc::{Allocator, Global};
44use  crate :: raw_vec:: RawVec ; 
55use  core:: array; 
66use  core:: fmt; 
7- use  core:: intrinsics:: arith_offset; 
87use  core:: iter:: { 
98    FusedIterator ,  InPlaceIterable ,  SourceIter ,  TrustedLen ,  TrustedRandomAccessNoCoerce , 
109} ; 
@@ -154,7 +153,7 @@ impl<T, A: Allocator> Iterator for IntoIter<T, A> {
154153            // purposefully don't use 'ptr.offset' because for 
155154            // vectors with 0-size elements this would return the 
156155            // same pointer. 
157-             self . ptr  = unsafe   {   arith_offset ( self . ptr   as   * const   i8 ,   1 )   as   * mut   T   } ; 
156+             self . ptr  = self . ptr . wrapping_byte_add ( 1 ) ; 
158157
159158            // Make up a value of this ZST. 
160159            Some ( unsafe  {  mem:: zeroed ( )  } ) 
@@ -184,7 +183,7 @@ impl<T, A: Allocator> Iterator for IntoIter<T, A> {
184183            // SAFETY: due to unchecked casts of unsigned amounts to signed offsets the wraparound 
185184            // effectively results in unsigned pointers representing positions 0..usize::MAX, 
186185            // which is valid for ZSTs. 
187-             self . ptr  = unsafe   {   arith_offset ( self . ptr   as   * const   i8 ,   step_size  as   isize )   as   * mut   T   } 
186+             self . ptr  = self . ptr . wrapping_byte_add ( step_size) ; 
188187        }  else  { 
189188            // SAFETY: the min() above ensures that step_size is in bounds 
190189            self . ptr  = unsafe  {  self . ptr . add ( step_size)  } ; 
@@ -217,7 +216,7 @@ impl<T, A: Allocator> Iterator for IntoIter<T, A> {
217216                return  Err ( unsafe  {  array:: IntoIter :: new_unchecked ( raw_ary,  0 ..len)  } ) ; 
218217            } 
219218
220-             self . ptr  = unsafe   {   arith_offset ( self . ptr   as   * const   i8 ,   N   as   isize )   as   * mut   T   } ; 
219+             self . ptr  = self . ptr . wrapping_byte_add ( N ) ; 
221220            // Safety: ditto 
222221            return  Ok ( unsafe  {  MaybeUninit :: array_assume_init ( raw_ary)  } ) ; 
223222        } 
@@ -267,7 +266,7 @@ impl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {
267266            None 
268267        }  else  if  mem:: size_of :: < T > ( )  == 0  { 
269268            // See above for why 'ptr.offset' isn't used 
270-             self . end  = unsafe   {   arith_offset ( self . end   as   * const   i8 ,  - 1 )   as   * mut   T   } ; 
269+             self . end  = self . ptr . wrapping_byte_sub ( 1 ) ; 
271270
272271            // Make up a value of this ZST. 
273272            Some ( unsafe  {  mem:: zeroed ( )  } ) 
@@ -283,9 +282,7 @@ impl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {
283282        let  step_size = self . len ( ) . min ( n) ; 
284283        if  mem:: size_of :: < T > ( )  == 0  { 
285284            // SAFETY: same as for advance_by() 
286-             self . end  = unsafe  { 
287-                 arith_offset ( self . end  as  * const  i8 ,  step_size. wrapping_neg ( )  as  isize )  as  * mut  T 
288-             } 
285+             self . end  = self . end . wrapping_byte_sub ( step_size) ; 
289286        }  else  { 
290287            // SAFETY: same as for advance_by() 
291288            self . end  = unsafe  {  self . end . sub ( step_size)  } ; 
0 commit comments