]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-92781: Avoid mixing declarations and code in C API (#92783)
authorVictor Stinner <vstinner@python.org>
Sun, 15 May 2022 09:19:52 +0000 (11:19 +0200)
committerGitHub <noreply@github.com>
Sun, 15 May 2022 09:19:52 +0000 (11:19 +0200)
Avoid mixing declarations and code in the C API to fix the compiler
warning: "ISO C90 forbids mixed declarations and code"
[-Werror=declaration-after-statement].

Include/cpython/abstract.h
Include/cpython/cellobject.h
Include/cpython/dictobject.h
Include/cpython/unicodeobject.h
Include/cpython/weakrefobject.h
Misc/NEWS.d/next/C API/2022-05-13-18-17-48.gh-issue-92781.TVDr3-.rst [new file with mode: 0644]

index 161e2cb30fde3ef3782a11abe9ebef83e3314c30..d276669312ee2f864035bfbc091a402c21e067f4 100644 (file)
@@ -111,9 +111,8 @@ static inline PyObject *
 PyObject_CallMethodOneArg(PyObject *self, PyObject *name, PyObject *arg)
 {
     PyObject *args[2] = {self, arg};
-
-    assert(arg != NULL);
     size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
+    assert(arg != NULL);
     return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL);
 }
 
@@ -160,9 +159,8 @@ static inline PyObject *
 _PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg)
 {
     PyObject *args[2] = {self, arg};
-
-    assert(arg != NULL);
     size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
+    assert(arg != NULL);
     return _PyObject_VectorcallMethodId(name, args, nargsf, _Py_NULL);
 }
 
index f778f86de746956f4bd7f323d42f519379f8f2ba..344238a533563d3c6af6a64dc835dd99d8e3e38a 100644 (file)
@@ -22,8 +22,9 @@ PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
 PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);
 
 static inline PyObject* PyCell_GET(PyObject *op) {
+    PyCellObject *cell;
     assert(PyCell_Check(op));
-    PyCellObject *cell = _Py_CAST(PyCellObject*, op);
+    cell = _Py_CAST(PyCellObject*, op);
     return cell->ob_ref;
 }
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030c0000
@@ -31,8 +32,9 @@ static inline PyObject* PyCell_GET(PyObject *op) {
 #endif
 
 static inline void PyCell_SET(PyObject *op, PyObject *value) {
+    PyCellObject *cell;
     assert(PyCell_Check(op));
-    PyCellObject *cell = _Py_CAST(PyCellObject*, op);
+    cell = _Py_CAST(PyCellObject*, op);
     cell->ob_ref = value;
 }
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030c0000
index f249c0e9ca5e2913fcb07116bec426ea56a89349..5788012ab159b99637ada108f5bb565bb788d1d3 100644 (file)
@@ -47,8 +47,9 @@ PyAPI_FUNC(int) _PyDict_Next(
 
 /* Get the number of items of a dictionary. */
 static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
+    PyDictObject *mp;
     assert(PyDict_Check(op));
-    PyDictObject *mp = _Py_CAST(PyDictObject*, op);
+    mp = _Py_CAST(PyDictObject*, op);
     return mp->ma_used;
 }
 #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030c0000
index 37bb13cbe5397d722b310746827e8c4225a5fc68..274339d7f9fe6915948edfd78400e74fb28b79d4 100644 (file)
@@ -262,8 +262,9 @@ static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
 }
 
 static inline void* _PyUnicode_NONCOMPACT_DATA(PyObject *op) {
+    void *data;
     assert(!PyUnicode_IS_COMPACT(op));
-    void *data = _PyUnicodeObject_CAST(op)->data.any;
+    data = _PyUnicodeObject_CAST(op)->data.any;
     assert(data != NULL);
     return data;
 }
@@ -369,11 +370,13 @@ static inline Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index)
    than iterating over the string. */
 static inline Py_UCS4 PyUnicode_MAX_CHAR_VALUE(PyObject *op)
 {
+    int kind;
+
     if (PyUnicode_IS_ASCII(op)) {
         return 0x7fU;
     }
 
-    int kind = PyUnicode_KIND(op);
+    kind = PyUnicode_KIND(op);
     if (kind == PyUnicode_1BYTE_KIND) {
        return 0xffU;
     }
index 2dbef2cea37658ec36f53d919ed1b640fa00890b..26b364f41d4d7e7e9e3824fb450770d338955a8c 100644 (file)
@@ -37,9 +37,11 @@ PyAPI_FUNC(Py_ssize_t) _PyWeakref_GetWeakrefCount(PyWeakReference *head);
 PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self);
 
 static inline PyObject* PyWeakref_GET_OBJECT(PyObject *ref_obj) {
+    PyWeakReference *ref;
+    PyObject *obj;
     assert(PyWeakref_Check(ref_obj));
-    PyWeakReference *ref = _Py_CAST(PyWeakReference*, ref_obj);
-    PyObject *obj = ref->wr_object;
+    ref = _Py_CAST(PyWeakReference*, ref_obj);
+    obj = ref->wr_object;
     // Explanation for the Py_REFCNT() check: when a weakref's target is part
     // of a long chain of deallocations which triggers the trashcan mechanism,
     // clearing the weakrefs can be delayed long after the target's refcount
diff --git a/Misc/NEWS.d/next/C API/2022-05-13-18-17-48.gh-issue-92781.TVDr3-.rst b/Misc/NEWS.d/next/C API/2022-05-13-18-17-48.gh-issue-92781.TVDr3-.rst
new file mode 100644 (file)
index 0000000..6442ba6
--- /dev/null
@@ -0,0 +1,3 @@
+Avoid mixing declarations and code in the C API to fix the compiler warning:
+"ISO C90 forbids mixed declarations and code"
+[-Werror=declaration-after-statement]. Patch by Victor Stinner.