@@ -58,10 +58,10 @@ typedef struct _Py_atomic_int {
58
58
atomic_thread_fence(ORDER)
59
59
60
60
#define _Py_atomic_store_explicit (ATOMIC_VAL , NEW_VAL , ORDER ) \
61
- atomic_store_explicit(&(ATOMIC_VAL)->_value, NEW_VAL, ORDER)
61
+ atomic_store_explicit(&(( ATOMIC_VAL)->_value) , NEW_VAL, ORDER)
62
62
63
63
#define _Py_atomic_load_explicit (ATOMIC_VAL , ORDER ) \
64
- atomic_load_explicit(&(ATOMIC_VAL)->_value, ORDER)
64
+ atomic_load_explicit(&(( ATOMIC_VAL)->_value) , ORDER)
65
65
66
66
/* Use builtin atomic operations in GCC >= 4.7 */
67
67
#elif defined(HAVE_BUILTIN_ATOMIC )
@@ -92,14 +92,14 @@ typedef struct _Py_atomic_int {
92
92
(assert((ORDER) == __ATOMIC_RELAXED \
93
93
|| (ORDER) == __ATOMIC_SEQ_CST \
94
94
|| (ORDER) == __ATOMIC_RELEASE), \
95
- __atomic_store_n(&(ATOMIC_VAL)->_value, NEW_VAL, ORDER))
95
+ __atomic_store_n(&(( ATOMIC_VAL)->_value) , NEW_VAL, ORDER))
96
96
97
97
#define _Py_atomic_load_explicit (ATOMIC_VAL , ORDER ) \
98
98
(assert((ORDER) == __ATOMIC_RELAXED \
99
99
|| (ORDER) == __ATOMIC_SEQ_CST \
100
100
|| (ORDER) == __ATOMIC_ACQUIRE \
101
101
|| (ORDER) == __ATOMIC_CONSUME), \
102
- __atomic_load_n(&(ATOMIC_VAL)->_value, ORDER))
102
+ __atomic_load_n(&(( ATOMIC_VAL)->_value) , ORDER))
103
103
104
104
/* Only support GCC (for expression statements) and x86 (for simple
105
105
* atomic semantics) and MSVC x86/x64/ARM */
@@ -324,7 +324,7 @@ inline intptr_t _Py_atomic_load_64bit(volatile uintptr_t* value, int order) {
324
324
}
325
325
326
326
#else
327
- #define _Py_atomic_load_64bit (ATOMIC_VAL , ORDER ) *ATOMIC_VAL
327
+ #define _Py_atomic_load_64bit (ATOMIC_VAL , ORDER ) *( ATOMIC_VAL)
328
328
#endif
329
329
330
330
inline int _Py_atomic_load_32bit (volatile int * value , int order ) {
@@ -359,15 +359,15 @@ inline int _Py_atomic_load_32bit(volatile int* value, int order) {
359
359
}
360
360
361
361
#define _Py_atomic_store_explicit (ATOMIC_VAL , NEW_VAL , ORDER ) \
362
- if (sizeof(* ATOMIC_VAL. _value) == 8) { \
363
- _Py_atomic_store_64bit((volatile long long*)ATOMIC_VAL. _value, NEW_VAL, ORDER) } else { \
364
- _Py_atomic_store_32bit((volatile long*)ATOMIC_VAL. _value, NEW_VAL, ORDER) }
362
+ if (sizeof(( ATOMIC_VAL)-> _value) == 8) { \
363
+ _Py_atomic_store_64bit((volatile long long*)&(( ATOMIC_VAL)-> _value) , NEW_VAL, ORDER) } else { \
364
+ _Py_atomic_store_32bit((volatile long*)&(( ATOMIC_VAL)-> _value) , NEW_VAL, ORDER) }
365
365
366
366
#define _Py_atomic_load_explicit (ATOMIC_VAL , ORDER ) \
367
367
( \
368
- sizeof(* (ATOMIC_VAL._value) ) == 8 ? \
369
- _Py_atomic_load_64bit((volatile long long*)ATOMIC_VAL. _value, ORDER) : \
370
- _Py_atomic_load_32bit((volatile long*)ATOMIC_VAL. _value, ORDER) \
368
+ sizeof((ATOMIC_VAL)->_value ) == 8 ? \
369
+ _Py_atomic_load_64bit((volatile long long*)&(( ATOMIC_VAL)-> _value) , ORDER) : \
370
+ _Py_atomic_load_32bit((volatile long*)&(( ATOMIC_VAL)-> _value) , ORDER) \
371
371
)
372
372
#elif defined(_M_ARM ) || defined(_M_ARM64 )
373
373
typedef enum _Py_memory_order {
@@ -391,13 +391,13 @@ typedef struct _Py_atomic_int {
391
391
#define _Py_atomic_store_64bit (ATOMIC_VAL , NEW_VAL , ORDER ) \
392
392
switch (ORDER) { \
393
393
case _Py_memory_order_acquire: \
394
- _InterlockedExchange64_acq((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
394
+ _InterlockedExchange64_acq((__int64 volatile*)&(( ATOMIC_VAL)->_value) , (__int64)NEW_VAL); \
395
395
break; \
396
396
case _Py_memory_order_release: \
397
- _InterlockedExchange64_rel((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
397
+ _InterlockedExchange64_rel((__int64 volatile*)&(( ATOMIC_VAL)->_value) , (__int64)NEW_VAL); \
398
398
break; \
399
399
default: \
400
- _InterlockedExchange64((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
400
+ _InterlockedExchange64((__int64 volatile*)&(( ATOMIC_VAL)->_value) , (__int64)NEW_VAL); \
401
401
break; \
402
402
}
403
403
#else
@@ -407,13 +407,13 @@ typedef struct _Py_atomic_int {
407
407
#define _Py_atomic_store_32bit (ATOMIC_VAL , NEW_VAL , ORDER ) \
408
408
switch (ORDER) { \
409
409
case _Py_memory_order_acquire: \
410
- _InterlockedExchange_acq((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
410
+ _InterlockedExchange_acq((volatile long*)&(( ATOMIC_VAL)->_value) , (int)NEW_VAL); \
411
411
break; \
412
412
case _Py_memory_order_release: \
413
- _InterlockedExchange_rel((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
413
+ _InterlockedExchange_rel((volatile long*)&(( ATOMIC_VAL)->_value) , (int)NEW_VAL); \
414
414
break; \
415
415
default: \
416
- _InterlockedExchange((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
416
+ _InterlockedExchange((volatile long*)&(( ATOMIC_VAL)->_value) , (int)NEW_VAL); \
417
417
break; \
418
418
}
419
419
@@ -454,7 +454,7 @@ inline intptr_t _Py_atomic_load_64bit(volatile uintptr_t* value, int order) {
454
454
}
455
455
456
456
#else
457
- #define _Py_atomic_load_64bit (ATOMIC_VAL , ORDER ) *ATOMIC_VAL
457
+ #define _Py_atomic_load_64bit (ATOMIC_VAL , ORDER ) *( ATOMIC_VAL)
458
458
#endif
459
459
460
460
inline int _Py_atomic_load_32bit (volatile int * value , int order ) {
@@ -489,15 +489,15 @@ inline int _Py_atomic_load_32bit(volatile int* value, int order) {
489
489
}
490
490
491
491
#define _Py_atomic_store_explicit (ATOMIC_VAL , NEW_VAL , ORDER ) \
492
- if (sizeof(* ATOMIC_VAL. _value) == 8) { \
493
- _Py_atomic_store_64bit(ATOMIC_VAL. _value, NEW_VAL, ORDER) } else { \
494
- _Py_atomic_store_32bit(ATOMIC_VAL. _value, NEW_VAL, ORDER) }
492
+ if (sizeof(( ATOMIC_VAL)-> _value) == 8) { \
493
+ _Py_atomic_store_64bit(&(( ATOMIC_VAL)-> _value) , NEW_VAL, ORDER) } else { \
494
+ _Py_atomic_store_32bit(&(( ATOMIC_VAL)-> _value) , NEW_VAL, ORDER) }
495
495
496
496
#define _Py_atomic_load_explicit (ATOMIC_VAL , ORDER ) \
497
497
( \
498
- sizeof(* (ATOMIC_VAL._value) ) == 8 ? \
499
- _Py_atomic_load_64bit(ATOMIC_VAL. _value, ORDER) : \
500
- _Py_atomic_load_32bit(ATOMIC_VAL. _value, ORDER) \
498
+ sizeof((ATOMIC_VAL)->_value ) == 8 ? \
499
+ _Py_atomic_load_64bit(&(( ATOMIC_VAL)-> _value) , ORDER) : \
500
+ _Py_atomic_load_32bit(&(( ATOMIC_VAL)-> _value) , ORDER) \
501
501
)
502
502
#endif
503
503
#else /* !gcc x86 !_msc_ver */
0 commit comments