[Python-checkins] gh-92781: Avoid mixing declarations and code in C API (#92783) (#92813)
vstinner
webhook-mailer at python.org
Mon May 16 07:20:18 EDT 2022
https://github.com/python/cpython/commit/a3d2ce95d185c70cdec56f10a09e2d67c0d3246e
commit: a3d2ce95d185c70cdec56f10a09e2d67c0d3246e
branch: 3.11
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2022-05-16T13:19:52+02:00
summary:
gh-92781: Avoid mixing declarations and code in C API (#92783) (#92813)
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].
(cherry picked from commit 90e72300730189c4a48529baaad9b0005d40731c)
files:
A Misc/NEWS.d/next/C API/2022-05-13-18-17-48.gh-issue-92781.TVDr3-.rst
M Include/cpython/abstract.h
M Include/cpython/unicodeobject.h
M Include/cpython/weakrefobject.h
diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index 161e2cb30fde3..d276669312ee2 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -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);
}
diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h
index fdbcb1cf403ae..8ec2fccaecf99 100644
--- a/Include/cpython/unicodeobject.h
+++ b/Include/cpython/unicodeobject.h
@@ -326,8 +326,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;
}
@@ -416,8 +417,9 @@ static inline Py_UCS4 PyUnicode_READ(int kind,
cache kind and use PyUnicode_READ instead. */
static inline Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index)
{
+ int kind;
assert(PyUnicode_IS_READY(unicode));
- int kind = PyUnicode_KIND(unicode);
+ kind = PyUnicode_KIND(unicode);
if (kind == PyUnicode_1BYTE_KIND) {
return PyUnicode_1BYTE_DATA(unicode)[index];
}
@@ -437,12 +439,14 @@ 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;
+
assert(PyUnicode_IS_READY(op));
if (PyUnicode_IS_ASCII(op)) {
return 0x7fU;
}
- int kind = PyUnicode_KIND(op);
+ kind = PyUnicode_KIND(op);
if (kind == PyUnicode_1BYTE_KIND) {
return 0xffU;
}
diff --git a/Include/cpython/weakrefobject.h b/Include/cpython/weakrefobject.h
index 2dbef2cea3765..26b364f41d4d7 100644
--- a/Include/cpython/weakrefobject.h
+++ b/Include/cpython/weakrefobject.h
@@ -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
index 0000000000000..6442ba619450f
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2022-05-13-18-17-48.gh-issue-92781.TVDr3-.rst
@@ -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.
More information about the Python-checkins
mailing list