@@ -966,8 +966,16 @@ impl<T> AtomicPtr<T> {
966
966
#[ inline]
967
967
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
968
968
pub fn load ( & self , order : Ordering ) -> * mut T {
969
+ #[ cfg( not( bootstrap) ) ]
969
970
// 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
+ }
971
979
}
972
980
973
981
/// Stores a value into the pointer.
@@ -994,6 +1002,12 @@ impl<T> AtomicPtr<T> {
994
1002
#[ inline]
995
1003
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
996
1004
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) ]
997
1011
// SAFETY: data races are prevented by atomic intrinsics.
998
1012
unsafe {
999
1013
atomic_store ( self . p . get ( ) as * mut usize , ptr as usize , order) ;
@@ -1105,6 +1119,7 @@ impl<T> AtomicPtr<T> {
1105
1119
success : Ordering ,
1106
1120
failure : Ordering ,
1107
1121
) -> Result < * mut T , * mut T > {
1122
+ #[ cfg( bootstrap) ]
1108
1123
// SAFETY: data races are prevented by atomic intrinsics.
1109
1124
unsafe {
1110
1125
let res = atomic_compare_exchange (
@@ -1119,6 +1134,11 @@ impl<T> AtomicPtr<T> {
1119
1134
Err ( x) => Err ( x as * mut T ) ,
1120
1135
}
1121
1136
}
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
+ }
1122
1142
}
1123
1143
1124
1144
/// 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> {
1165
1185
success : Ordering ,
1166
1186
failure : Ordering ,
1167
1187
) -> Result < * mut T , * mut T > {
1188
+ #[ cfg( bootstrap) ]
1168
1189
// SAFETY: data races are prevented by atomic intrinsics.
1169
1190
unsafe {
1170
1191
let res = atomic_compare_exchange_weak (
@@ -1179,6 +1200,11 @@ impl<T> AtomicPtr<T> {
1179
1200
Err ( x) => Err ( x as * mut T ) ,
1180
1201
}
1181
1202
}
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
+ }
1182
1208
}
1183
1209
1184
1210
/// Fetches the value, and applies a function to it that returns an optional
0 commit comments