diff --git a/Misc/NEWS.d/next/C API/2022-06-07-17-08-35.gh-issue-93585.EfIKlx.rst b/Misc/NEWS.d/next/C API/2022-06-07-17-08-35.gh-issue-93585.EfIKlx.rst new file mode 100644 index 000000000000000..76f431d5fdb5791 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2022-06-07-17-08-35.gh-issue-93585.EfIKlx.rst @@ -0,0 +1,6 @@ +Set ``PyCode_Type.tp_basicsize`` to ``sizeof(PyCodeObject)``. Cython makes the +assumption that ``PyCode_Type.tp_basicsize`` equals to +``sizeof(PyCodeObject)``. This assumption is no longer true since the commit +2bde6827ea4f136297b2d882480b981ff26262b6. Restore ``tp_basicsize`` until the +PyCodeObject structure can use a C99 flexible array of size zero with the +syntax ``char co_code_adaptive[]``. Patch by Victor Stinner. diff --git a/Objects/codeobject.c b/Objects/codeobject.c index dc6dec1b2a549bc..2d4807d2e8c1385 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -1910,7 +1910,7 @@ static struct PyMethodDef code_methods[] = { PyTypeObject PyCode_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "code", - offsetof(PyCodeObject, co_code_adaptive), + sizeof(PyCodeObject), sizeof(_Py_CODEUNIT), (destructor)code_dealloc, /* tp_dealloc */ 0, /* tp_vectorcall_offset */