diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index ca6819d2cd44730..c68667ab784b448 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -317,14 +317,16 @@ static uintptr_t return_pointer_as_int(char* p) { static inline uintptr_t _Py_get_machine_stack_pointer(void) { uintptr_t result; -#if defined(_M_ARM64) +#if _Py__has_builtin(__builtin_stack_address) + result = (uintptr_t)__builtin_stack_address(); +#elif defined(_MSC_VER) && defined(_M_ARM64) result = __getReg(31); -#elif defined(_M_X64) || defined(_M_IX86) +#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) result = (uintptr_t)_AddressOfReturnAddress(); #elif defined(__aarch64__) __asm__ ("mov %0, sp" : "=r" (result)); #elif defined(__x86_64__) - __asm__("{movq %%rsp, %0" : "=r" (result)); + __asm__ ("{movq %%rsp, %0|mov %0, rsp}" : "=r" (result)); #else char here; result = (uintptr_t)&here; diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-09-25-22-34-50.gh-issue-158165.GVPxKy.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-09-25-22-34-50.gh-issue-158165.GVPxKy.rst new file mode 100644 index 000000000000000..055bfba4688809b --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-09-25-22-34-50.gh-issue-158165.GVPxKy.rst @@ -0,0 +1,2 @@ +Fix compilation of ``_Py_get_machine_stack_pointer()`` with MinGW on Windows. +Patch by Donghee Na.