1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-20 00:42:27 +03:00

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 <lars@greiz-reinsdorf.de>

Discussion: https://postgr.es/m/CAHXCYb2OjNHtoGVKyXtXmw4B3bUXwJX6M-Lcp1KcMCRUMLOocA@mail.gmail.com
This commit is contained in:
Andrew Dunstan 2025-04-01 16:24:59 -04:00
parent e19dc74491
commit c313fa4602

View File

@ -1326,19 +1326,19 @@ extern int fdatasync(int fildes);
/* /*
* When there is no sigsetjmp, its functionality is provided by plain * When there is no sigsetjmp, its functionality is provided by plain
* setjmp. We now support the case only on Windows. However, it seems * setjmp. We now support the case only on Windows. However, it seems
* that MinGW-64 has some longstanding issues in its setjmp support, * that MinGW-64 has some longstanding issues in its setjmp support when
* so on that toolchain we cheat and use gcc's builtins. * building with MSVCRT, so on that toolchain we cheat and use gcc's builtins.
*/ */
#ifdef WIN32 #ifdef WIN32
#ifdef __MINGW64__ #if defined(__MINGW64__) && !defined(_UCRT)
typedef intptr_t sigjmp_buf[5]; typedef intptr_t sigjmp_buf[5];
#define sigsetjmp(x,y) __builtin_setjmp(x) #define sigsetjmp(x,y) __builtin_setjmp(x)
#define siglongjmp __builtin_longjmp #define siglongjmp __builtin_longjmp
#else /* !__MINGW64__ */ #else /* !defined(__MINGW64__) || defined(_UCRT) */
#define sigjmp_buf jmp_buf #define sigjmp_buf jmp_buf
#define sigsetjmp(x,y) setjmp(x) #define sigsetjmp(x,y) setjmp(x)
#define siglongjmp longjmp #define siglongjmp longjmp
#endif /* __MINGW64__ */ #endif /* defined(__MINGW64__) && !defined(_UCRT) */
#endif /* WIN32 */ #endif /* WIN32 */
/* /port compatibility functions */ /* /port compatibility functions */