这是indexloc提供的服务,不要输入任何密码
Skip to content

MSVC throws warning C4746: consider using __iso_volatile_load/store intrinsic functions with free-threading build on ARM64 Windows #141606

@XuehaiPan

Description

@XuehaiPan

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:

// --- _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:

  • MSVC: Compiler Warning C4746

    volatile access of '' is subject to /volatile:[iso|ms] setting; consider using __iso_volatile_load/store intrinsic functions.

  • MSVC: ARM64 intrinsics: __iso_volatile_load/store intrinsics

    These 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    interpreter-core(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancement

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions