From 4fa962eee31880aab31e5d86460103d371469863 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 13 Mar 2025 11:59:04 +0100 Subject: [PATCH 1/4] gh-111178: Fix function signatures in misc files --- Modules/_io/bufferedio.c | 6 ++++-- Modules/_pickle.c | 5 +++-- Modules/_threadmodule.c | 3 ++- Objects/typevarobject.c | 10 ++++++---- Python/import.c | 3 ++- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 06a5afc52559c3..938097846b3448 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -452,8 +452,9 @@ _io__Buffered___sizeof___impl(buffered *self) } static int -buffered_traverse(buffered *self, visitproc visit, void *arg) +buffered_traverse(PyObject *op, visitproc visit, void *arg) { + buffered *self = (buffered*)op; Py_VISIT(Py_TYPE(self)); Py_VISIT(self->raw); Py_VISIT(self->dict); @@ -1481,8 +1482,9 @@ _io__Buffered_truncate_impl(buffered *self, PyTypeObject *cls, PyObject *pos) } static PyObject * -buffered_iternext(buffered *self) +buffered_iternext(PyObject *op) { + buffered *self = (buffered*)op; PyObject *line; PyTypeObject *tp; diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 5811835aa4f05e..55b42c7df50010 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -7969,8 +7969,9 @@ pickle_clear(PyObject *m) } static void -pickle_free(PyObject *m) +pickle_free(void *arg) { + PyObject *m = (PyObject*)arg; _Pickle_ClearState(_Pickle_GetState(m)); } @@ -8077,7 +8078,7 @@ static struct PyModuleDef _picklemodule = { .m_slots = pickle_slots, .m_traverse = pickle_traverse, .m_clear = pickle_clear, - .m_free = (freefunc)pickle_free, + .m_free = pickle_free, }; PyMODINIT_FUNC diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index d423854b8ebff3..328a2d328aa5ac 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -545,8 +545,9 @@ ThreadHandle_join(ThreadHandle *self, PyTime_t timeout_ns) } static int -set_done(ThreadHandle *handle) +set_done(void *arg) { + ThreadHandle *handle = (ThreadHandle*)arg; assert(get_thread_handle_state(handle) == THREAD_HANDLE_RUNNING); if (detach_thread(handle) < 0) { PyErr_SetString(ThreadError, "failed detaching handle"); diff --git a/Objects/typevarobject.c b/Objects/typevarobject.c index 118d2546b818e6..258969c6fa4ba8 100644 --- a/Objects/typevarobject.c +++ b/Objects/typevarobject.c @@ -2254,15 +2254,17 @@ call_typing_args_kwargs(const char *name, PyTypeObject *cls, PyObject *args, PyO } static PyObject * -generic_init_subclass(PyTypeObject *cls, PyObject *args, PyObject *kwargs) +generic_init_subclass(PyObject *cls, PyObject *args, PyObject *kwargs) { - return call_typing_args_kwargs("_generic_init_subclass", cls, args, kwargs); + return call_typing_args_kwargs("_generic_init_subclass", + (PyTypeObject*)cls, args, kwargs); } static PyObject * -generic_class_getitem(PyTypeObject *cls, PyObject *args, PyObject *kwargs) +generic_class_getitem(PyObject *cls, PyObject *args, PyObject *kwargs) { - return call_typing_args_kwargs("_generic_class_getitem", cls, args, kwargs); + return call_typing_args_kwargs("_generic_class_getitem", + (PyTypeObject*)cls, args, kwargs); } PyObject * diff --git a/Python/import.c b/Python/import.c index 6836e13972ce3c..8c50f076c30860 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1146,8 +1146,9 @@ get_cached_m_dict(struct extensions_cache_value *value, } static void -del_extensions_cache_value(struct extensions_cache_value *value) +del_extensions_cache_value(void *raw) { + struct extensions_cache_value *value = raw; if (value != NULL) { del_cached_m_dict(value); del_cached_def(value); From 1df1425bb099df9b4645407601ea004790130423 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 13 Mar 2025 12:49:25 +0100 Subject: [PATCH 2/4] Address Benedikt's review --- Modules/_io/bufferedio.c | 2 +- Modules/_pickle.c | 5 ++--- Python/import.c | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 938097846b3448..781eb1028da2b9 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -454,7 +454,7 @@ _io__Buffered___sizeof___impl(buffered *self) static int buffered_traverse(PyObject *op, visitproc visit, void *arg) { - buffered *self = (buffered*)op; + buffered *self = buffered_CAST(op); Py_VISIT(Py_TYPE(self)); Py_VISIT(self->raw); Py_VISIT(self->dict); diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 55b42c7df50010..c2ae33c0fcecc1 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -7969,10 +7969,9 @@ pickle_clear(PyObject *m) } static void -pickle_free(void *arg) +pickle_free(void *m) { - PyObject *m = (PyObject*)arg; - _Pickle_ClearState(_Pickle_GetState(m)); + _Pickle_ClearState(_Pickle_GetState((PyObject*)m)); } static int diff --git a/Python/import.c b/Python/import.c index 8c50f076c30860..78b380ca6e505c 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1249,7 +1249,7 @@ _extensions_cache_init(void) hashtable_hash_str, hashtable_compare_str, hashtable_destroy_str, // key - (_Py_hashtable_destroy_func)del_extensions_cache_value, // value + del_extensions_cache_value, // value &alloc ); if (EXTENSIONS.hashtable == NULL) { From 4d68e1441619aed73664cad22a6e027e8288f1a6 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 13 Mar 2025 12:50:44 +0100 Subject: [PATCH 3/4] Use also buffered_CAST() in buffered_iternext() --- Modules/_io/bufferedio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 781eb1028da2b9..57aa990941eb4b 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -1484,7 +1484,7 @@ _io__Buffered_truncate_impl(buffered *self, PyTypeObject *cls, PyObject *pos) static PyObject * buffered_iternext(PyObject *op) { - buffered *self = (buffered*)op; + buffered *self = buffered_CAST(op); PyObject *line; PyTypeObject *tp; From 4f2fde2f69d12d02ad16ddd36808bf1c9243b0cd Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 13 Mar 2025 14:20:07 +0100 Subject: [PATCH 4/4] Remove now useless cast --- Modules/_threadmodule.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 328a2d328aa5ac..4862b24fa93314 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -565,7 +565,7 @@ ThreadHandle_set_done(ThreadHandle *self) return -1; } - if (_PyOnceFlag_CallOnce(&self->once, (_Py_once_fn_t *)set_done, self) == + if (_PyOnceFlag_CallOnce(&self->once, set_done, self) == -1) { return -1; }