summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS.d/next/Build/2022-11-15-08-40-22.gh-issue-99337.5LoQDE.rst1
-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
-rw-r--r--Modules/posixmodule.c20
-rw-r--r--Python/pylifecycle.c7
7 files changed, 54 insertions, 9 deletions
diff --git a/Misc/NEWS.d/next/Build/2022-11-15-08-40-22.gh-issue-99337.5LoQDE.rst b/Misc/NEWS.d/next/Build/2022-11-15-08-40-22.gh-issue-99337.5LoQDE.rst
new file mode 100644
index 0000000..f7396ab
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2022-11-15-08-40-22.gh-issue-99337.5LoQDE.rst
@@ -0,0 +1 @@
+Fix a compilation issue with GCC 12 on macOS.
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index 95b0912..c28762d 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -405,9 +405,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 7875640..f42ff08 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -96,6 +96,7 @@
#define CTYPES_CAPSULE_NAME_PYMEM "_ctypes pymem"
+
static void pymem_destructor(PyObject *ptr)
{
void *p = PyCapsule_GetPointer(ptr, CTYPES_CAPSULE_NAME_PYMEM);
@@ -829,7 +830,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
@@ -1442,8 +1447,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 38edc90..108660c 100644
--- a/Modules/_ctypes/malloc_closure.c
+++ b/Modules/_ctypes/malloc_closure.c
@@ -20,6 +20,7 @@
/* #define MALLOC_CLOSURE_DEBUG */ /* enable for some debugging output */
+
/******************************************************************/
typedef union _tagITEM {
@@ -93,7 +94,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;
@@ -111,7 +116,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
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index a45179f..140e9b4 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -154,6 +154,18 @@
# define HAVE_SYMLINKAT_RUNTIME (symlinkat != NULL)
# endif
+# ifdef HAVE_UTIMENSAT
+# define HAVE_UTIMENSAT_RUNTIME (utimensat != NULL)
+# endif
+
+# ifdef HAVE_FUTIMENS
+# define HAVE_FUTIMENS_RUNTIME (futimens != NULL)
+# endif
+
+# ifdef HAVE_PWRITEV
+# define HAVE_PWRITEV_RUNTIME (pwritev != NULL)
+# endif
+
#endif
#ifdef HAVE_FUTIMESAT
@@ -9817,7 +9829,7 @@ os_preadv_impl(PyObject *module, int fd, PyObject *buffers, Py_off_t offset,
} while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
#else
do {
-#ifdef __APPLE__
+#if defined(__APPLE__) && defined(__clang__)
/* This entire function will be removed from the module dict when the API
* is not available.
*/
@@ -9832,7 +9844,7 @@ os_preadv_impl(PyObject *module, int fd, PyObject *buffers, Py_off_t offset,
Py_END_ALLOW_THREADS
} while (n < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
-#ifdef __APPLE__
+#if defined(__APPLE__) && defined(__clang__)
#pragma clang diagnostic pop
#endif
@@ -10459,7 +10471,7 @@ os_pwritev_impl(PyObject *module, int fd, PyObject *buffers, Py_off_t offset,
} while (result < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
#else
-#ifdef __APPLE__
+#if defined(__APPLE__) && defined(__clang__)
/* This entire function will be removed from the module dict when the API
* is not available.
*/
@@ -10475,7 +10487,7 @@ os_pwritev_impl(PyObject *module, int fd, PyObject *buffers, Py_off_t offset,
Py_END_ALLOW_THREADS
} while (result < 0 && errno == EINTR && !(async_err = PyErr_CheckSignals()));
-#ifdef __APPLE__
+#if defined(__APPLE__) && defined(__clang__)
#pragma clang diagnostic pop
#endif
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 0363e2e..4060c23 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -82,6 +82,10 @@ int _Py_UnhandledKeyboardInterrupt = 0;
* interpreter state for various runtime debugging tools, but is *not* an
* officially supported feature */
+/* Suppress deprecation warning for PyBytesObject.ob_shash */
+_Py_COMP_DIAG_PUSH
+_Py_COMP_DIAG_IGNORE_DEPR_DECLS
+
#if defined(MS_WINDOWS)
#pragma section("PyRuntime", read, write)
@@ -95,9 +99,6 @@ __attribute__((
#endif
-/* Suppress deprecation warning for PyBytesObject.ob_shash */
-_Py_COMP_DIAG_PUSH
-_Py_COMP_DIAG_IGNORE_DEPR_DECLS
_PyRuntimeState _PyRuntime
#if defined(__linux__) && (defined(__GNUC__) || defined(__clang__))
__attribute__ ((section (".PyRuntime")))