-
-
Notifications
You must be signed in to change notification settings - Fork 33.4k
Description
Feature or enhancement
Proposal:
I'm building a C extension for free-threading builds. I got the following warnings on Windows ARM64:
GHA build log: https://github.com/metaopt/optree/actions/runs/19398216194/job/55503073816?pr=235#step:11:906
C:\Users\runneradmin\AppData\Local\pypa\cibuildwheel\Cache\nuget-cpython\pythonarm64-freethreaded.3.14.0\tools\include\cpython\pyatomic_msc.h(910): error C2220: the following warning is treated as an error [C:\a\optree\optree\build\temp.win-arm64-cpython-314t\Release\src\_C.vcxproj]
C:\Users\runneradmin\AppData\Local\pypa\cibuildwheel\Cache\nuget-cpython\pythonarm64-freethreaded.3.14.0\tools\include\cpython\pyatomic_msc.h(910): warning C4746: volatile access of '<expression>' is subject to /volatile:<iso|ms> setting; consider using __iso_volatile_load/store intrinsic functions [C:\a\optree\optree\build\temp.win-arm64-cpython-314t\Release\src\_C.vcxproj]
C:\Users\runneradmin\AppData\Local\pypa\cibuildwheel\Cache\nuget-cpython\pythonarm64-freethreaded.3.14.0\tools\include\cpython\pyatomic_msc.h(724): warning C4746: volatile access of '<expression>' is subject to /volatile:<iso|ms> setting; consider using __iso_volatile_load/store intrinsic functions [C:\a\optree\optree\build\temp.win-arm64-cpython-314t\Release\src\_C.vcxproj]
...
In Include/cpython/pyatomic_msc.h, we use type casts:
cpython/Include/cpython/pyatomic_msc.h
Lines 629 to 641 in ed73c90
| // --- _Py_atomic_load_relaxed ----------------------------------------------- | |
| static inline int | |
| _Py_atomic_load_int_relaxed(const int *obj) | |
| { | |
| return *(volatile int *)obj; | |
| } | |
| static inline char | |
| _Py_atomic_load_char_relaxed(const char *obj) | |
| { | |
| return *(volatile char *)obj; | |
| } |
MSVC complains about this (at least on ARM64), and asks for using __iso_volatile_load/store intrinsics.
References:
-
volatile access of '' is subject to
/volatile:[iso|ms]setting; consider using__iso_volatile_load/storeintrinsic functions. -
MSVC: ARM64 intrinsics:
__iso_volatile_load/storeintrinsicsThese intrinsic functions explicitly perform loads and stores that aren't subject to compiler optimizations.
__int16 __iso_volatile_load16(const volatile __int16 * Location); __int32 __iso_volatile_load32(const volatile __int32 * Location); __int64 __iso_volatile_load64(const volatile __int64 * Location); __int8 __iso_volatile_load8(const volatile __int8 * Location); void __iso_volatile_store16(volatile __int16 * Location, __int16 Value); void __iso_volatile_store32(volatile __int32 * Location, __int32 Value); void __iso_volatile_store64(volatile __int64 * Location, __int64 Value); void __iso_volatile_store8(volatile __int8 * Location, __int8 Value);
Has this already been discussed elsewhere?
No response given
Links to previous discussion of this feature:
No response