summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2018-10-25 15:28:11 (GMT)
committerGitHub <noreply@github.com>2018-10-25 15:28:11 (GMT)
commit18618e652c56e61a134e596b315a13c7cb997a89 (patch)
tree007e352f7e49a7b78469a1bff62a8a01d1bb2f8d /Modules
parentd03b7757811ae51277f8ed399a9a0fd78dfd3425 (diff)
downloadcpython-18618e652c56e61a134e596b315a13c7cb997a89.zip
cpython-18618e652c56e61a134e596b315a13c7cb997a89.tar.gz
cpython-18618e652c56e61a134e596b315a13c7cb997a89.tar.bz2
bpo-35059: Add Py_STATIC_INLINE() macro (GH-10093)
* Add Py_STATIC_INLINE() macro to declare a "static inline" function. If the compiler supports it, try to always inline the function even if no optimization level was specified. * Modify pydtrace.h to use Py_STATIC_INLINE() when WITH_DTRACE is not defined. * Add an unit test on Py_DECREF() to make sure that _Py_NegativeRefcount() reports the correct filename.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_testcapimodule.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 4381e93..b2cda51 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -4818,6 +4818,25 @@ fail:
}
+#ifdef Py_REF_DEBUG
+static PyObject *
+negative_refcount(PyObject *self, PyObject *Py_UNUSED(args))
+{
+ PyObject *obj = PyUnicode_FromString("negative_refcount");
+ if (obj == NULL) {
+ return NULL;
+ }
+ assert(Py_REFCNT(obj) == 1);
+
+ Py_REFCNT(obj) = 0;
+ /* Py_DECREF() must call _Py_NegativeRefcount() and abort Python */
+ Py_DECREF(obj);
+
+ Py_RETURN_NONE;
+}
+#endif
+
+
static PyMethodDef TestMethods[] = {
{"raise_exception", raise_exception, METH_VARARGS},
{"raise_memoryerror", raise_memoryerror, METH_NOARGS},
@@ -5043,6 +5062,9 @@ static PyMethodDef TestMethods[] = {
{"EncodeLocaleEx", encode_locale_ex, METH_VARARGS},
{"DecodeLocaleEx", decode_locale_ex, METH_VARARGS},
{"get_coreconfig", get_coreconfig, METH_NOARGS},
+#ifdef Py_REF_DEBUG
+ {"negative_refcount", negative_refcount, METH_NOARGS},
+#endif
{NULL, NULL} /* sentinel */
};