diff --git a/newsfragments/5647.fixed.md b/newsfragments/5647.fixed.md new file mode 100644 index 00000000000..3acbd67c9fc --- /dev/null +++ b/newsfragments/5647.fixed.md @@ -0,0 +1 @@ +Fix `PyMemberDescrObject.d_member` type in `pyo3-ffi` to use `PyMemberDef` for Python 3.11+ (was incorrectly `PyGetSetDef`). diff --git a/pyo3-ffi/src/cpython/descrobject.rs b/pyo3-ffi/src/cpython/descrobject.rs index 03d64789fa7..88e952f2c53 100644 --- a/pyo3-ffi/src/cpython/descrobject.rs +++ b/pyo3-ffi/src/cpython/descrobject.rs @@ -1,6 +1,9 @@ use crate::{PyGetSetDef, PyMethodDef, PyObject, PyTypeObject}; use std::ffi::{c_char, c_int, c_void}; +#[cfg(Py_3_11)] +use crate::PyMemberDef; + pub type wrapperfunc = Option< unsafe extern "C" fn( slf: *mut PyObject, @@ -53,7 +56,10 @@ pub struct PyMethodDescrObject { #[repr(C)] pub struct PyMemberDescrObject { pub d_common: PyDescrObject, + #[cfg(not(Py_3_11))] pub d_member: *mut PyGetSetDef, + #[cfg(Py_3_11)] + pub d_member: *mut PyMemberDef, } #[repr(C)]