From f89d3bc417361aa46acea52774527ae575dfe059 Mon Sep 17 00:00:00 2001 From: Chris Eibl <138194463+chris-eibl@users.noreply.github.com> Date: Sat, 15 Mar 2025 16:12:06 +0100 Subject: [PATCH 1/2] silence warning in pycore_ceval.h --- Include/internal/pycore_ceval.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h index 5618539f2df73e..6945a5548dcd74 100644 --- a/Include/internal/pycore_ceval.h +++ b/Include/internal/pycore_ceval.h @@ -199,6 +199,10 @@ static uintptr_t return_pointer_as_int(char* p) { } #endif +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4172) +#endif static inline uintptr_t _Py_get_machine_stack_pointer(void) { #if _Py__has_builtin(__builtin_frame_address) @@ -209,6 +213,9 @@ _Py_get_machine_stack_pointer(void) { return return_pointer_as_int(&here); #endif } +#ifdef _MSC_VER +#pragma warning(pop) +#endif static inline int _Py_MakeRecCheck(PyThreadState *tstate) { uintptr_t here_addr = _Py_get_machine_stack_pointer(); From 8f0d65f9ab77b52460861758fc1226f8ec8b372b Mon Sep 17 00:00:00 2001 From: Chris Eibl <138194463+chris-eibl@users.noreply.github.com> Date: Sat, 15 Mar 2025 17:33:07 +0100 Subject: [PATCH 2/2] use _AddressOfReturnAddress --- Include/internal/pycore_ceval.h | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h index 6945a5548dcd74..903b101035e4c0 100644 --- a/Include/internal/pycore_ceval.h +++ b/Include/internal/pycore_ceval.h @@ -193,29 +193,24 @@ extern void _PyEval_DeactivateOpCache(void); /* --- _Py_EnterRecursiveCall() ----------------------------------------- */ -#if !_Py__has_builtin(__builtin_frame_address) +#if !_Py__has_builtin(__builtin_frame_address) && !defined(_MSC_VER) static uintptr_t return_pointer_as_int(char* p) { return (uintptr_t)p; } #endif -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4172) -#endif static inline uintptr_t _Py_get_machine_stack_pointer(void) { #if _Py__has_builtin(__builtin_frame_address) return (uintptr_t)__builtin_frame_address(0); +#elif defined(_MSC_VER) + return (uintptr_t)_AddressOfReturnAddress(); #else char here; /* Avoid compiler warning about returning stack address */ return return_pointer_as_int(&here); #endif } -#ifdef _MSC_VER -#pragma warning(pop) -#endif static inline int _Py_MakeRecCheck(PyThreadState *tstate) { uintptr_t here_addr = _Py_get_machine_stack_pointer();