@@ -1828,11 +1828,11 @@ impl<T: ?Sized> Arc<T> {
1828
1828
mem_to_arcinner : impl FnOnce ( * mut u8 ) -> * mut ArcInner < T > ,
1829
1829
) -> * mut ArcInner < T > {
1830
1830
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) ;
1832
1832
1833
1833
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 ) ) ;
1836
1836
}
1837
1837
1838
1838
inner
@@ -1863,7 +1863,7 @@ impl<T: ?Sized, A: Allocator> Arc<T, A> {
1863
1863
// Copy value as bytes
1864
1864
ptr:: copy_nonoverlapping (
1865
1865
& * 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 ,
1867
1867
value_size,
1868
1868
) ;
1869
1869
@@ -1898,7 +1898,7 @@ impl<T> Arc<[T]> {
1898
1898
unsafe {
1899
1899
let ptr = Self :: allocate_for_slice ( v. len ( ) ) ;
1900
1900
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 ( ) ) ;
1902
1902
1903
1903
Self :: from_ptr ( ptr)
1904
1904
}
@@ -1934,10 +1934,10 @@ impl<T> Arc<[T]> {
1934
1934
let ptr = Self :: allocate_for_slice ( len) ;
1935
1935
1936
1936
let mem = ptr as * mut _ as * mut u8 ;
1937
- let layout = Layout :: for_value ( & * ptr) ;
1937
+ let layout = Layout :: for_value_raw ( ptr) ;
1938
1938
1939
1939
// 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 ;
1941
1941
1942
1942
let mut guard = Guard { mem : NonNull :: new_unchecked ( mem) , elems, layout, n_elems : 0 } ;
1943
1943
@@ -3383,7 +3383,7 @@ impl<T, A: Allocator + Clone> From<Vec<T, A>> for Arc<[T], A> {
3383
3383
let ( vec_ptr, len, cap, alloc) = v. into_raw_parts_with_alloc ( ) ;
3384
3384
3385
3385
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) ;
3387
3387
3388
3388
// Create a `Vec<T, &A>` with length 0, to deallocate the buffer
3389
3389
// without dropping its contents or the allocator
0 commit comments