[Python-checkins] Use _Py_RVALUE() in macros (#99844)

vstinner webhook-mailer at python.org
Mon Nov 28 11:42:29 EST 2022


https://github.com/python/cpython/commit/7bae15cf37239d4d345e09cc318bd82d03ec30cd
commit: 7bae15cf37239d4d345e09cc318bd82d03ec30cd
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2022-11-28T17:42:22+01:00
summary:

Use _Py_RVALUE() in macros (#99844)

The following macros are modified to use _Py_RVALUE(), so they can no
longer be used as l-value:

* DK_LOG_SIZE()
* _PyCode_CODE()
* _PyList_ITEMS()
* _PyTuple_ITEMS()
* _Py_SLIST_HEAD()
* _Py_SLIST_ITEM_NEXT()

_PyCode_CODE() is private and other macros are part of the internal
C API.

files:
M Include/cpython/code.h
M Include/internal/pycore_dict.h
M Include/internal/pycore_hashtable.h
M Include/internal/pycore_list.h
M Include/internal/pycore_tuple.h

diff --git a/Include/cpython/code.h b/Include/cpython/code.h
index 15b464fe2ee9..fd57e0035bc0 100644
--- a/Include/cpython/code.h
+++ b/Include/cpython/code.h
@@ -153,7 +153,7 @@ static inline Py_ssize_t PyCode_GetNumFree(PyCodeObject *op) {
     return op->co_nfreevars;
 }
 
-#define _PyCode_CODE(CO) ((_Py_CODEUNIT *)(CO)->co_code_adaptive)
+#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
 #define _PyCode_NBYTES(CO) (Py_SIZE(CO) * (Py_ssize_t)sizeof(_Py_CODEUNIT))
 
 /* Public interface */
diff --git a/Include/internal/pycore_dict.h b/Include/internal/pycore_dict.h
index 04b708490130..2b3b56b343ad 100644
--- a/Include/internal/pycore_dict.h
+++ b/Include/internal/pycore_dict.h
@@ -122,7 +122,7 @@ struct _dictvalues {
     PyObject *values[1];
 };
 
-#define DK_LOG_SIZE(dk)  ((dk)->dk_log2_size)
+#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
 #if SIZEOF_VOID_P > 4
 #define DK_SIZE(dk)      (((int64_t)1)<<DK_LOG_SIZE(dk))
 #else
diff --git a/Include/internal/pycore_hashtable.h b/Include/internal/pycore_hashtable.h
index 2aa23a24c283..6501ab14d276 100644
--- a/Include/internal/pycore_hashtable.h
+++ b/Include/internal/pycore_hashtable.h
@@ -18,9 +18,9 @@ typedef struct {
     _Py_slist_item_t *head;
 } _Py_slist_t;
 
-#define _Py_SLIST_ITEM_NEXT(ITEM) (((_Py_slist_item_t *)(ITEM))->next)
+#define _Py_SLIST_ITEM_NEXT(ITEM) _Py_RVALUE(((_Py_slist_item_t *)(ITEM))->next)
 
-#define _Py_SLIST_HEAD(SLIST) (((_Py_slist_t *)(SLIST))->head)
+#define _Py_SLIST_HEAD(SLIST) _Py_RVALUE(((_Py_slist_t *)(SLIST))->head)
 
 
 /* _Py_hashtable: table entry */
diff --git a/Include/internal/pycore_list.h b/Include/internal/pycore_list.h
index 691d13bc8d9f..628267cc8a96 100644
--- a/Include/internal/pycore_list.h
+++ b/Include/internal/pycore_list.h
@@ -35,7 +35,7 @@ struct _Py_list_state {
 #endif
 };
 
-#define _PyList_ITEMS(op) (_PyList_CAST(op)->ob_item)
+#define _PyList_ITEMS(op) _Py_RVALUE(_PyList_CAST(op)->ob_item)
 
 extern int
 _PyList_AppendTakeRefListResize(PyListObject *self, PyObject *newitem);
diff --git a/Include/internal/pycore_tuple.h b/Include/internal/pycore_tuple.h
index 1efe4fa2bdef..504c36338d9e 100644
--- a/Include/internal/pycore_tuple.h
+++ b/Include/internal/pycore_tuple.h
@@ -62,7 +62,7 @@ struct _Py_tuple_state {
 #endif
 };
 
-#define _PyTuple_ITEMS(op) (_PyTuple_CAST(op)->ob_item)
+#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
 
 extern PyObject *_PyTuple_FromArray(PyObject *const *, Py_ssize_t);
 extern PyObject *_PyTuple_FromArraySteal(PyObject *const *, Py_ssize_t);



More information about the Python-checkins mailing list