@@ -787,7 +787,7 @@ impl<T, A: Allocator> Rc<T, A> {
787787
788788        let  strong = unsafe  { 
789789            let  inner = init_ptr. as_ptr ( ) ; 
790-             ptr:: write ( ptr :: addr_of_mut! ( ( * inner) . value) ,  data) ; 
790+             ptr:: write ( & raw   mut   ( * inner) . value ,  data) ; 
791791
792792            let  prev_value = ( * inner) . strong . get ( ) ; 
793793            debug_assert_eq ! ( prev_value,  0 ,  "No prior strong references should exist" ) ; 
@@ -1442,7 +1442,7 @@ impl<T: ?Sized, A: Allocator> Rc<T, A> {
14421442        // SAFETY: This cannot go through Deref::deref or Rc::inner because 
14431443        // this is required to retain raw/mut provenance such that e.g. `get_mut` can 
14441444        // write through the pointer after the Rc is recovered through `from_raw`. 
1445-         unsafe  {  ptr :: addr_of_mut! ( ( * ptr) . value)  } 
1445+         unsafe  {  & raw   mut   ( * ptr) . value  } 
14461446    } 
14471447
14481448    /// Constructs an `Rc<T, A>` from a raw pointer in the provided allocator. 
@@ -2042,8 +2042,8 @@ impl<T: ?Sized> Rc<T> {
20422042        unsafe  { 
20432043            debug_assert_eq ! ( Layout :: for_value_raw( inner) ,  layout) ; 
20442044
2045-             ptr :: addr_of_mut! ( ( * inner) . strong) . write ( Cell :: new ( 1 ) ) ; 
2046-             ptr :: addr_of_mut! ( ( * inner) . weak) . write ( Cell :: new ( 1 ) ) ; 
2045+             ( & raw   mut   ( * inner) . strong ) . write ( Cell :: new ( 1 ) ) ; 
2046+             ( & raw   mut   ( * inner) . weak ) . write ( Cell :: new ( 1 ) ) ; 
20472047        } 
20482048
20492049        Ok ( inner) 
@@ -2072,8 +2072,8 @@ impl<T: ?Sized, A: Allocator> Rc<T, A> {
20722072
20732073            // Copy value as bytes 
20742074            ptr:: copy_nonoverlapping ( 
2075-                 core :: ptr :: addr_of! ( * src)  as  * const  u8 , 
2076-                 ptr :: addr_of_mut! ( ( * ptr) . value)  as  * mut  u8 , 
2075+                 ( & raw   const   * src)  as  * const  u8 , 
2076+                 ( & raw   mut   ( * ptr) . value )  as  * mut  u8 , 
20772077                value_size, 
20782078            ) ; 
20792079
@@ -2107,11 +2107,7 @@ impl<T> Rc<[T]> {
21072107    unsafe  fn  copy_from_slice ( v :  & [ T ] )  -> Rc < [ T ] >  { 
21082108        unsafe  { 
21092109            let  ptr = Self :: allocate_for_slice ( v. len ( ) ) ; 
2110-             ptr:: copy_nonoverlapping ( 
2111-                 v. as_ptr ( ) , 
2112-                 ptr:: addr_of_mut!( ( * ptr) . value)  as  * mut  T , 
2113-                 v. len ( ) , 
2114-             ) ; 
2110+             ptr:: copy_nonoverlapping ( v. as_ptr ( ) ,  ( & raw  mut  ( * ptr) . value )  as  * mut  T ,  v. len ( ) ) ; 
21152111            Self :: from_ptr ( ptr) 
21162112        } 
21172113    } 
@@ -2149,7 +2145,7 @@ impl<T> Rc<[T]> {
21492145            let  layout = Layout :: for_value_raw ( ptr) ; 
21502146
21512147            // Pointer to first element 
2152-             let  elems = ptr :: addr_of_mut! ( ( * ptr) . value)  as  * mut  T ; 
2148+             let  elems = ( & raw   mut   ( * ptr) . value )  as  * mut  T ; 
21532149
21542150            let  mut  guard = Guard  {  mem :  NonNull :: new_unchecked ( mem) ,  elems,  layout,  n_elems :  0  } ; 
21552151
@@ -2577,7 +2573,7 @@ impl<T: ?Sized + fmt::Debug, A: Allocator> fmt::Debug for Rc<T, A> {
25772573#[ stable( feature = "rust1" ,  since = "1.0.0" ) ]  
25782574impl < T :  ?Sized ,  A :  Allocator >  fmt:: Pointer  for  Rc < T ,  A >  { 
25792575    fn  fmt ( & self ,  f :  & mut  fmt:: Formatter < ' _ > )  -> fmt:: Result  { 
2580-         fmt:: Pointer :: fmt ( & core :: ptr :: addr_of! ( * * self ) ,  f) 
2576+         fmt:: Pointer :: fmt ( & ( & raw   const   * * self ) ,  f) 
25812577    } 
25822578} 
25832579
@@ -2718,7 +2714,7 @@ impl<T, A: Allocator> From<Vec<T, A>> for Rc<[T], A> {
27182714            let  ( vec_ptr,  len,  cap,  alloc)  = v. into_raw_parts_with_alloc ( ) ; 
27192715
27202716            let  rc_ptr = Self :: allocate_for_slice_in ( len,  & alloc) ; 
2721-             ptr:: copy_nonoverlapping ( vec_ptr,  ptr :: addr_of_mut! ( ( * rc_ptr) . value)  as  * mut  T ,  len) ; 
2717+             ptr:: copy_nonoverlapping ( vec_ptr,  ( & raw   mut   ( * rc_ptr) . value )  as  * mut  T ,  len) ; 
27222718
27232719            // Create a `Vec<T, &A>` with length 0, to deallocate the buffer 
27242720            // without dropping its contents or the allocator 
@@ -3084,7 +3080,7 @@ impl<T: ?Sized, A: Allocator> Weak<T, A> {
30843080            // SAFETY: if is_dangling returns false, then the pointer is dereferenceable. 
30853081            // The payload may be dropped at this point, and we have to maintain provenance, 
30863082            // so use raw pointer manipulation. 
3087-             unsafe  {  ptr :: addr_of_mut! ( ( * ptr) . value)  } 
3083+             unsafe  {  & raw   mut   ( * ptr) . value  } 
30883084        } 
30893085    } 
30903086
0 commit comments