@@ -966,8 +966,16 @@ impl<T> AtomicPtr<T> {
966966 #[ inline]
967967 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
968968 pub fn load ( & self , order : Ordering ) -> * mut T {
969+ #[ cfg( not( bootstrap) ) ]
969970 // SAFETY: data races are prevented by atomic intrinsics.
970- unsafe { atomic_load ( self . p . get ( ) as * mut usize , order) as * mut T }
971+ unsafe {
972+ atomic_load ( self . p . get ( ) , order)
973+ }
974+ #[ cfg( bootstrap) ]
975+ // SAFETY: data races are prevented by atomic intrinsics.
976+ unsafe {
977+ atomic_load ( self . p . get ( ) as * mut usize , order) as * mut T
978+ }
971979 }
972980
973981 /// Stores a value into the pointer.
@@ -994,6 +1002,12 @@ impl<T> AtomicPtr<T> {
9941002 #[ inline]
9951003 #[ stable( feature = "rust1" , since = "1.0.0" ) ]
9961004 pub fn store ( & self , ptr : * mut T , order : Ordering ) {
1005+ #[ cfg( not( bootstrap) ) ]
1006+ // SAFETY: data races are prevented by atomic intrinsics.
1007+ unsafe {
1008+ atomic_store ( self . p . get ( ) , ptr, order) ;
1009+ }
1010+ #[ cfg( bootstrap) ]
9971011 // SAFETY: data races are prevented by atomic intrinsics.
9981012 unsafe {
9991013 atomic_store ( self . p . get ( ) as * mut usize , ptr as usize , order) ;
@@ -1105,6 +1119,7 @@ impl<T> AtomicPtr<T> {
11051119 success : Ordering ,
11061120 failure : Ordering ,
11071121 ) -> Result < * mut T , * mut T > {
1122+ #[ cfg( bootstrap) ]
11081123 // SAFETY: data races are prevented by atomic intrinsics.
11091124 unsafe {
11101125 let res = atomic_compare_exchange (
@@ -1119,6 +1134,11 @@ impl<T> AtomicPtr<T> {
11191134 Err ( x) => Err ( x as * mut T ) ,
11201135 }
11211136 }
1137+ #[ cfg( not( bootstrap) ) ]
1138+ // SAFETY: data races are prevented by atomic intrinsics.
1139+ unsafe {
1140+ atomic_compare_exchange ( self . p . get ( ) , current, new, success, failure)
1141+ }
11221142 }
11231143
11241144 /// Stores a value into the pointer if the current value is the same as the `current` value.
@@ -1165,6 +1185,7 @@ impl<T> AtomicPtr<T> {
11651185 success : Ordering ,
11661186 failure : Ordering ,
11671187 ) -> Result < * mut T , * mut T > {
1188+ #[ cfg( bootstrap) ]
11681189 // SAFETY: data races are prevented by atomic intrinsics.
11691190 unsafe {
11701191 let res = atomic_compare_exchange_weak (
@@ -1179,6 +1200,11 @@ impl<T> AtomicPtr<T> {
11791200 Err ( x) => Err ( x as * mut T ) ,
11801201 }
11811202 }
1203+ #[ cfg( not( bootstrap) ) ]
1204+ // SAFETY: data races are prevented by atomic intrinsics.
1205+ unsafe {
1206+ atomic_compare_exchange_weak ( self . p . get ( ) , current, new, success, failure)
1207+ }
11821208 }
11831209
11841210 /// Fetches the value, and applies a function to it that returns an optional
0 commit comments