@@ -1828,11 +1828,11 @@ impl<T: ?Sized> Arc<T> {
18281828 mem_to_arcinner : impl FnOnce ( * mut u8 ) -> * mut ArcInner < T > ,
18291829 ) -> * mut ArcInner < T > {
18301830 let inner = mem_to_arcinner ( ptr. as_non_null_ptr ( ) . as_ptr ( ) ) ;
1831- debug_assert_eq ! ( unsafe { Layout :: for_value ( & * inner) } , layout) ;
1831+ debug_assert_eq ! ( unsafe { Layout :: for_value_raw ( inner) } , layout) ;
18321832
18331833 unsafe {
1834- ptr:: write ( & mut ( * inner) . strong , atomic:: AtomicUsize :: new ( 1 ) ) ;
1835- ptr:: write ( & mut ( * inner) . weak , atomic:: AtomicUsize :: new ( 1 ) ) ;
1834+ ptr:: addr_of_mut! ( ( * inner) . strong) . write ( atomic:: AtomicUsize :: new ( 1 ) ) ;
1835+ ptr:: addr_of_mut! ( ( * inner) . weak) . write ( atomic:: AtomicUsize :: new ( 1 ) ) ;
18361836 }
18371837
18381838 inner
@@ -1863,7 +1863,7 @@ impl<T: ?Sized, A: Allocator> Arc<T, A> {
18631863 // Copy value as bytes
18641864 ptr:: copy_nonoverlapping (
18651865 & * src as * const T as * const u8 ,
1866- & mut ( * ptr) . data as * mut _ as * mut u8 ,
1866+ ptr :: addr_of_mut! ( ( * ptr) . data) as * mut u8 ,
18671867 value_size,
18681868 ) ;
18691869
@@ -1898,7 +1898,7 @@ impl<T> Arc<[T]> {
18981898 unsafe {
18991899 let ptr = Self :: allocate_for_slice ( v. len ( ) ) ;
19001900
1901- ptr:: copy_nonoverlapping ( v. as_ptr ( ) , & mut ( * ptr) . data as * mut [ T ] as * mut T , v. len ( ) ) ;
1901+ ptr:: copy_nonoverlapping ( v. as_ptr ( ) , ptr :: addr_of_mut! ( ( * ptr) . data) as * mut T , v. len ( ) ) ;
19021902
19031903 Self :: from_ptr ( ptr)
19041904 }
@@ -1934,10 +1934,10 @@ impl<T> Arc<[T]> {
19341934 let ptr = Self :: allocate_for_slice ( len) ;
19351935
19361936 let mem = ptr as * mut _ as * mut u8 ;
1937- let layout = Layout :: for_value ( & * ptr) ;
1937+ let layout = Layout :: for_value_raw ( ptr) ;
19381938
19391939 // Pointer to first element
1940- let elems = & mut ( * ptr) . data as * mut [ T ] as * mut T ;
1940+ let elems = ptr :: addr_of_mut! ( ( * ptr) . data) as * mut T ;
19411941
19421942 let mut guard = Guard { mem : NonNull :: new_unchecked ( mem) , elems, layout, n_elems : 0 } ;
19431943
@@ -3383,7 +3383,7 @@ impl<T, A: Allocator + Clone> From<Vec<T, A>> for Arc<[T], A> {
33833383 let ( vec_ptr, len, cap, alloc) = v. into_raw_parts_with_alloc ( ) ;
33843384
33853385 let rc_ptr = Self :: allocate_for_slice_in ( len, & alloc) ;
3386- ptr:: copy_nonoverlapping ( vec_ptr, & mut ( * rc_ptr) . data as * mut [ T ] as * mut T , len) ;
3386+ ptr:: copy_nonoverlapping ( vec_ptr, ptr :: addr_of_mut! ( ( * rc_ptr) . data) as * mut T , len) ;
33873387
33883388 // Create a `Vec<T, &A>` with length 0, to deallocate the buffer
33893389 // without dropping its contents or the allocator
0 commit comments