bpo-30459: Cast the result of PyCell_SET to void (GH-23654)
This commit is contained in:
parent
c266736ec1
commit
0ef96c2b2a
|
@ -611,6 +611,13 @@ Porting to Python 3.10
|
|||
:ref:`Python Path Configuration. <init-path-config>`.
|
||||
(Contributed by Victor Stinner in :issue:`42260`.)
|
||||
|
||||
* :c:func:`PyList_SET_ITEM`, :c:func:`PyTuple_SET_ITEM` and
|
||||
:c:func:`PyCell_SET` macros can no longer be used as l-value or r-value.
|
||||
For example, ``x = PyList_SET_ITEM(a, b, c)`` and
|
||||
``PyList_SET_ITEM(a, b, c) = x`` now fail with a compiler error. It prevents
|
||||
bugs like ``if (PyList_SET_ITEM (a, b, c) < 0) ...`` test.
|
||||
(Contributed by Zackery Spytz and Victor Stinner in :issue:`30459`.)
|
||||
|
||||
Deprecated
|
||||
----------
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
|
|||
PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);
|
||||
|
||||
#define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref)
|
||||
#define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v)
|
||||
#define PyCell_SET(op, v) ((void)(((PyCellObject *)(op))->ob_ref = v))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -1,2 +1,6 @@
|
|||
Cast the result of :c:func:`PyList_SET_ITEM` and :c:func:`PyTuple_SET_ITEM`
|
||||
to void.
|
||||
:c:func:`PyList_SET_ITEM`, :c:func:`PyTuple_SET_ITEM` and :c:func:`PyCell_SET`
|
||||
macros can no longer be used as l-value or r-value. For example,
|
||||
``x = PyList_SET_ITEM(a, b, c)`` and ``PyList_SET_ITEM(a, b, c) = x`` now fail
|
||||
with a compiler error. It prevents bugs like
|
||||
``if (PyList_SET_ITEM (a, b, c) < 0) ...`` test.
|
||||
Patch by Zackery Spytz and Victor Stinner.
|
||||
|
|
Loading…
Reference in New Issue