diff options
author | Victor Stinner <vstinner@redhat.com> | 2018-10-25 15:28:11 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-25 15:28:11 (GMT) |
commit | 18618e652c56e61a134e596b315a13c7cb997a89 (patch) | |
tree | 007e352f7e49a7b78469a1bff62a8a01d1bb2f8d /Modules | |
parent | d03b7757811ae51277f8ed399a9a0fd78dfd3425 (diff) | |
download | cpython-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.c | 22 |
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 */ }; |