mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
_ctypes callbacks.c uses _Py_COMP_DIAG_IGNORE_DEPR_DECLS (#105732)
Replace #pragma with _Py_COMP_DIAG_PUSH, _Py_COMP_DIAG_IGNORE_DEPR_DECLS and _Py_COMP_DIAG_POP to ease Python maintenance. Also add a comment explaining why callbacks.c ignores a deprecation warning.
This commit is contained in:
parent
5cdd5ba49d
commit
fb655e0c45
1 changed files with 20 additions and 16 deletions
|
@ -416,25 +416,29 @@ CThunkObject *_ctypes_alloc_callback(PyObject *callable,
|
|||
PyErr_Format(PyExc_NotImplementedError, "ffi_prep_closure_loc() is missing");
|
||||
goto error;
|
||||
#else
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
#endif
|
||||
#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5)))
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||
#endif
|
||||
// GH-85272, GH-23327, GH-100540: On macOS,
|
||||
// HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME is checked at runtime because the
|
||||
// symbol might not be available at runtime when targeting macOS 10.14
|
||||
// or earlier. Even if ffi_prep_closure_loc() is called in practice,
|
||||
// the deprecated ffi_prep_closure() code path is needed if
|
||||
// HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME is false.
|
||||
//
|
||||
// On non-macOS platforms, even if HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME is
|
||||
// defined as 1 and ffi_prep_closure_loc() is used in practice, this
|
||||
// code path is still compiled and emits a compiler warning. The
|
||||
// deprecated code path is likely to be removed by a simple
|
||||
// optimization pass.
|
||||
//
|
||||
// Ignore the compiler warning on the ffi_prep_closure() deprecation,
|
||||
// rather than using complex #if/#else code paths for the different
|
||||
// platforms.
|
||||
_Py_COMP_DIAG_PUSH
|
||||
_Py_COMP_DIAG_IGNORE_DEPR_DECLS
|
||||
result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p);
|
||||
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 5)))
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
_Py_COMP_DIAG_POP
|
||||
#endif
|
||||
}
|
||||
|
||||
if (result != FFI_OK) {
|
||||
PyErr_Format(PyExc_RuntimeError,
|
||||
"ffi_prep_closure failed with %d", result);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue