@@ -15,6 +15,8 @@ use core::{
15
15
} ;
16
16
17
17
use super :: fallback:: utils:: { Backoff , CachePadded } ;
18
+ #[ cfg( portable_atomic_no_strict_provenance) ]
19
+ use crate :: utils:: ptr:: PtrExt ;
18
20
19
21
struct Spinlock {
20
22
state : AtomicUsize ,
@@ -106,7 +108,7 @@ macro_rules! atomic_int {
106
108
// SAFETY: any data races are prevented by the lock and the raw
107
109
// pointer passed in is valid because we got it from a reference.
108
110
unsafe {
109
- let _guard = lock( self . v. get( ) as usize ) ;
111
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
110
112
self . v. get( ) . read( )
111
113
}
112
114
}
@@ -118,7 +120,7 @@ macro_rules! atomic_int {
118
120
// SAFETY: any data races are prevented by the lock and the raw
119
121
// pointer passed in is valid because we got it from a reference.
120
122
unsafe {
121
- let _guard = lock( self . v. get( ) as usize ) ;
123
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
122
124
self . v. get( ) . write( val)
123
125
}
124
126
}
@@ -128,7 +130,7 @@ macro_rules! atomic_int {
128
130
// SAFETY: any data races are prevented by the lock and the raw
129
131
// pointer passed in is valid because we got it from a reference.
130
132
unsafe {
131
- let _guard = lock( self . v. get( ) as usize ) ;
133
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
132
134
let prev = self . v. get( ) . read( ) ;
133
135
self . v. get( ) . write( val) ;
134
136
prev
@@ -148,7 +150,7 @@ macro_rules! atomic_int {
148
150
// SAFETY: any data races are prevented by the lock and the raw
149
151
// pointer passed in is valid because we got it from a reference.
150
152
unsafe {
151
- let _guard = lock( self . v. get( ) as usize ) ;
153
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
152
154
let prev = self . v. get( ) . read( ) ;
153
155
if prev == current {
154
156
self . v. get( ) . write( new) ;
@@ -176,7 +178,7 @@ macro_rules! atomic_int {
176
178
// SAFETY: any data races are prevented by the lock and the raw
177
179
// pointer passed in is valid because we got it from a reference.
178
180
unsafe {
179
- let _guard = lock( self . v. get( ) as usize ) ;
181
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
180
182
let prev = self . v. get( ) . read( ) ;
181
183
self . v. get( ) . write( prev. wrapping_add( val) ) ;
182
184
prev
@@ -188,7 +190,7 @@ macro_rules! atomic_int {
188
190
// SAFETY: any data races are prevented by the lock and the raw
189
191
// pointer passed in is valid because we got it from a reference.
190
192
unsafe {
191
- let _guard = lock( self . v. get( ) as usize ) ;
193
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
192
194
let prev = self . v. get( ) . read( ) ;
193
195
self . v. get( ) . write( prev. wrapping_sub( val) ) ;
194
196
prev
@@ -200,7 +202,7 @@ macro_rules! atomic_int {
200
202
// SAFETY: any data races are prevented by the lock and the raw
201
203
// pointer passed in is valid because we got it from a reference.
202
204
unsafe {
203
- let _guard = lock( self . v. get( ) as usize ) ;
205
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
204
206
let prev = self . v. get( ) . read( ) ;
205
207
self . v. get( ) . write( prev & val) ;
206
208
prev
@@ -212,7 +214,7 @@ macro_rules! atomic_int {
212
214
// SAFETY: any data races are prevented by the lock and the raw
213
215
// pointer passed in is valid because we got it from a reference.
214
216
unsafe {
215
- let _guard = lock( self . v. get( ) as usize ) ;
217
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
216
218
let prev = self . v. get( ) . read( ) ;
217
219
self . v. get( ) . write( !( prev & val) ) ;
218
220
prev
@@ -224,7 +226,7 @@ macro_rules! atomic_int {
224
226
// SAFETY: any data races are prevented by the lock and the raw
225
227
// pointer passed in is valid because we got it from a reference.
226
228
unsafe {
227
- let _guard = lock( self . v. get( ) as usize ) ;
229
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
228
230
let prev = self . v. get( ) . read( ) ;
229
231
self . v. get( ) . write( prev | val) ;
230
232
prev
@@ -236,7 +238,7 @@ macro_rules! atomic_int {
236
238
// SAFETY: any data races are prevented by the lock and the raw
237
239
// pointer passed in is valid because we got it from a reference.
238
240
unsafe {
239
- let _guard = lock( self . v. get( ) as usize ) ;
241
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
240
242
let prev = self . v. get( ) . read( ) ;
241
243
self . v. get( ) . write( prev ^ val) ;
242
244
prev
@@ -248,7 +250,7 @@ macro_rules! atomic_int {
248
250
// SAFETY: any data races are prevented by the lock and the raw
249
251
// pointer passed in is valid because we got it from a reference.
250
252
unsafe {
251
- let _guard = lock( self . v. get( ) as usize ) ;
253
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
252
254
let prev = self . v. get( ) . read( ) ;
253
255
self . v. get( ) . write( core:: cmp:: max( prev, val) ) ;
254
256
prev
@@ -260,7 +262,7 @@ macro_rules! atomic_int {
260
262
// SAFETY: any data races are prevented by the lock and the raw
261
263
// pointer passed in is valid because we got it from a reference.
262
264
unsafe {
263
- let _guard = lock( self . v. get( ) as usize ) ;
265
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
264
266
let prev = self . v. get( ) . read( ) ;
265
267
self . v. get( ) . write( core:: cmp:: min( prev, val) ) ;
266
268
prev
@@ -272,7 +274,7 @@ macro_rules! atomic_int {
272
274
// SAFETY: any data races are prevented by the lock and the raw
273
275
// pointer passed in is valid because we got it from a reference.
274
276
unsafe {
275
- let _guard = lock( self . v. get( ) as usize ) ;
277
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
276
278
let prev = self . v. get( ) . read( ) ;
277
279
self . v. get( ) . write( !prev) ;
278
280
prev
@@ -288,7 +290,7 @@ macro_rules! atomic_int {
288
290
// SAFETY: any data races are prevented by the lock and the raw
289
291
// pointer passed in is valid because we got it from a reference.
290
292
unsafe {
291
- let _guard = lock( self . v. get( ) as usize ) ;
293
+ let _guard = lock( self . v. get( ) . addr ( ) ) ;
292
294
let prev = self . v. get( ) . read( ) ;
293
295
self . v. get( ) . write( prev. wrapping_neg( ) ) ;
294
296
prev
0 commit comments