summaryrefslogtreecommitdiffstats
path: root/Modules/_ctypes
diff options
context:
space:
mode:
authorRonald Oussoren <ronaldoussoren@mac.com>2022-11-21 09:50:20 (GMT)
committerGitHub <noreply@github.com>2022-11-21 09:50:20 (GMT)
commitcdde29dde90947df9bac39c1d19479914fb3db09 (patch)
treebed26cebb9afdf979bf632b27f3088742554521a /Modules/_ctypes
parent6d8da238ccdf946dc90e20821652d8caa25b76ba (diff)
downloadcpython-cdde29dde90947df9bac39c1d19479914fb3db09.zip
cpython-cdde29dde90947df9bac39c1d19479914fb3db09.tar.gz
cpython-cdde29dde90947df9bac39c1d19479914fb3db09.tar.bz2
gh-99337: Fix compile errors with gcc 12 on macOS (#99470)
Fix a number of compile errors with GCC-12 on macOS: 1. In pylifecycle.c the compile rejects _Pragma within a declaration 2. posixmodule.c was missing a number of ..._RUNTIME macros for non-clang on macOS 3. _ctypes assumed that __builtin_available is always present on macOS
Diffstat (limited to 'Modules/_ctypes')
-rw-r--r--Modules/_ctypes/callbacks.c6
-rw-r--r--Modules/_ctypes/callproc.c14
-rw-r--r--Modules/_ctypes/ctypes.h6
-rw-r--r--Modules/_ctypes/malloc_closure.c9
4 files changed, 33 insertions, 2 deletions
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index 8df2f54..459632b 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -403,9 +403,15 @@ CThunkObject *_ctypes_alloc_callback(PyObject *callable,
"ffi_prep_cif failed with %d", result);
goto error;
}
+
+
#if HAVE_FFI_PREP_CLOSURE_LOC
# ifdef USING_APPLE_OS_LIBFFI
+# ifdef HAVE_BUILTIN_AVAILABLE
# define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)
+# else
+# define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME (ffi_prep_closure_loc != NULL)
+# endif
# else
# define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME 1
# endif
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index a6c005b..28b7cd4 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -101,6 +101,7 @@
#define CTYPES_CAPSULE_NAME_PYMEM "_ctypes pymem"
+
static void pymem_destructor(PyObject *ptr)
{
void *p = PyCapsule_GetPointer(ptr, CTYPES_CAPSULE_NAME_PYMEM);
@@ -831,7 +832,11 @@ static int _call_function_pointer(int flags,
#endif
# ifdef USING_APPLE_OS_LIBFFI
+# ifdef HAVE_BUILTIN_AVAILABLE
# define HAVE_FFI_PREP_CIF_VAR_RUNTIME __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)
+# else
+# define HAVE_FFI_PREP_CIF_VAR_RUNTIME (ffi_prep_cif_var != NULL)
+# endif
# elif HAVE_FFI_PREP_CIF_VAR
# define HAVE_FFI_PREP_CIF_VAR_RUNTIME true
# else
@@ -1444,8 +1449,13 @@ copy_com_pointer(PyObject *self, PyObject *args)
#else
#ifdef __APPLE__
#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH
-#define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \
- __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)
+# ifdef HAVE_BUILTIN_AVAILABLE
+# define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \
+ __builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)
+# else
+# define HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH_RUNTIME \
+ (_dyld_shared_cache_contains_path != NULL)
+# endif
#else
// Support the deprecated case of compiling on an older macOS version
static void *libsystem_b_handle;
diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h
index 88eb9f5..a7029b6 100644
--- a/Modules/_ctypes/ctypes.h
+++ b/Modules/_ctypes/ctypes.h
@@ -26,6 +26,12 @@
#endif
#endif
+#if defined(__has_builtin)
+#if __has_builtin(__builtin_available)
+#define HAVE_BUILTIN_AVAILABLE 1
+#endif
+#endif
+
typedef struct tagPyCArgObject PyCArgObject;
typedef struct tagCDataObject CDataObject;
typedef PyObject *(* GETFUNC)(void *, Py_ssize_t size);
diff --git a/Modules/_ctypes/malloc_closure.c b/Modules/_ctypes/malloc_closure.c
index d47153f..3a85932 100644
--- a/Modules/_ctypes/malloc_closure.c
+++ b/Modules/_ctypes/malloc_closure.c
@@ -23,6 +23,7 @@
/* #define MALLOC_CLOSURE_DEBUG */ /* enable for some debugging output */
+
/******************************************************************/
typedef union _tagITEM {
@@ -96,7 +97,11 @@ void Py_ffi_closure_free(void *p)
{
#ifdef HAVE_FFI_CLOSURE_ALLOC
#ifdef USING_APPLE_OS_LIBFFI
+# ifdef HAVE_BUILTIN_AVAILABLE
if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) {
+# else
+ if (ffi_closure_free != NULL) {
+# endif
#endif
ffi_closure_free(p);
return;
@@ -114,7 +119,11 @@ void *Py_ffi_closure_alloc(size_t size, void** codeloc)
{
#ifdef HAVE_FFI_CLOSURE_ALLOC
#ifdef USING_APPLE_OS_LIBFFI
+# ifdef HAVE_BUILTIN_AVAILABLE
if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) {
+# else
+ if (ffi_closure_alloc != NULL) {
+# endif
#endif
return ffi_closure_alloc(size, codeloc);
#ifdef USING_APPLE_OS_LIBFFI