From c313fa4602defe1be947370ab5b217ca163a1e3c Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Tue, 1 Apr 2025 16:24:59 -0400 Subject: [PATCH] Use workaround of __builtin_setjmp only on MINGW on MSVCRT MSVCRT is not present Windows/ARM64 and the workaround is not necessary on any UCRT based toolchain. Author: Lars Kanis Discussion: https://postgr.es/m/CAHXCYb2OjNHtoGVKyXtXmw4B3bUXwJX6M-Lcp1KcMCRUMLOocA@mail.gmail.com --- src/include/c.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/include/c.h b/src/include/c.h index 8cdc16a0f4a..94697aab428 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -1326,19 +1326,19 @@ extern int fdatasync(int fildes); /* * When there is no sigsetjmp, its functionality is provided by plain * setjmp. We now support the case only on Windows. However, it seems - * that MinGW-64 has some longstanding issues in its setjmp support, - * so on that toolchain we cheat and use gcc's builtins. + * that MinGW-64 has some longstanding issues in its setjmp support when + * building with MSVCRT, so on that toolchain we cheat and use gcc's builtins. */ #ifdef WIN32 -#ifdef __MINGW64__ +#if defined(__MINGW64__) && !defined(_UCRT) typedef intptr_t sigjmp_buf[5]; #define sigsetjmp(x,y) __builtin_setjmp(x) #define siglongjmp __builtin_longjmp -#else /* !__MINGW64__ */ +#else /* !defined(__MINGW64__) || defined(_UCRT) */ #define sigjmp_buf jmp_buf #define sigsetjmp(x,y) setjmp(x) #define siglongjmp longjmp -#endif /* __MINGW64__ */ +#endif /* defined(__MINGW64__) && !defined(_UCRT) */ #endif /* WIN32 */ /* /port compatibility functions */