You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Compilation Warning for memoryview.tobytes and _collections._tuplegetter.__reduce__ #80378
bpo-33012: Invalid function cast warnings with gcc 8 for METH_NOARGS
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee='https://github.com/matrixise'closed_at=<Date2019-03-05.14:57:52.535>created_at=<Date2019-03-05.14:31:54.058>labels= ['easy', '3.8']
title='Compilation Warning for memoryview.tobytes and _collections._tuplegetter.__reduce__'updated_at=<Date2019-03-05.16:41:13.004>user='https://github.com/matrixise'
changed the title [-]Compilation Warning for memoryview.tobytes[/-][+]Compilation Warning for memoryview.tobytes and _collections._tuplegetter.__reduce__[/+]on Mar 5, 2019
Thank you for your PR, I prefer your patch, just because you have just added the PyObject *Py_UNUSED(ignored) to the tuplegetter_reduce function. And in this case, you don't need to cast to (void(*)(void)).
This is only for methods with METH_NOARGS. The code that calls such method, calls it with two arguments, passing NULL as the second argument. So the signature of the C function should have two parameters. Functions for methods with METH_KEYWORDS or METH_FASTCALL should have different corresponding signatures.
New changeset adfffc7 by Serhiy Storchaka in branch 'master':
Fix the C function signature for _collections._tuplegetter.__reduce__. (GH-12180) adfffc7
Activity
matrixise commentedon Mar 5, 2019
gcc -pthread -c -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -g -Og -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -I./Include/internal -I. -I./Include -DPy_BUILD_CORE -o Objects/memoryobject.o Objects/memoryobject.c
Objects/memoryobject.c:3112:21: warning: cast between incompatible function types from 'PyObject * ()(PyMemoryViewObject *, PyObject *, PyObject *)' {aka 'struct _object * ()(struct <anonymous> *, struct _object *, struct _object *)'} to 'PyObject * ()(PyObject *, PyObject *)' {aka 'struct _object * ()(struct _object *, struct _object *)'} [-Wcast-function-type]
{"tobytes", (PyCFunction)memory_tobytes, METH_VARARGS|METH_KEYWORDS, memory_tobytes_doc},
I am preparing a small PR for this issue.
matrixise commentedon Mar 5, 2019
Fix an other warning in the same PR
_collections._tuplegetter.__reduce__
[-]Compilation Warning for memoryview.tobytes[/-][+]Compilation Warning for memoryview.tobytes and _collections._tuplegetter.__reduce__[/+]vstinner commentedon Mar 5, 2019
I prefer to reuse bpo-33012.
serhiy-storchaka commentedon Mar 5, 2019
This is not correct fix for tuplegetter_reduce. tuplegetter_reduce should have two parameters, just the second is unused.
matrixise commentedon Mar 5, 2019
Hi @serhiy,
Thank you for your PR, I prefer your patch, just because you have just added the PyObject *Py_UNUSED(ignored) to the tuplegetter_reduce function. And in this case, you don't need to cast to (void(*)(void)).
I will use this tip for the next time.
Thank
serhiy-storchaka commentedon Mar 5, 2019
This is only for methods with METH_NOARGS. The code that calls such method, calls it with two arguments, passing NULL as the second argument. So the signature of the C function should have two parameters. Functions for methods with METH_KEYWORDS or METH_FASTCALL should have different corresponding signatures.
serhiy-storchaka commentedon Mar 5, 2019
New changeset adfffc7 by Serhiy Storchaka in branch 'master':
Fix the C function signature for _collections._tuplegetter.__reduce__. (GH-12180)
adfffc7