-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Closed
Labels
3.14bugs and security fixesbugs and security fixes3.15new features, bugs and security fixesnew features, bugs and security fixestopic-C-APItype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Lines 95 to 118 in 46f11b3
| // Py_REFCNT() implementation for the stable ABI | |
| PyAPI_FUNC(Py_ssize_t) Py_REFCNT(PyObject *ob); | |
| #if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030e0000 | |
| // Stable ABI implements Py_REFCNT() as a function call | |
| // on limited C API version 3.14 and newer. | |
| #else | |
| static inline Py_ssize_t _Py_REFCNT(PyObject *ob) { | |
| #if !defined(Py_GIL_DISABLED) | |
| return ob->ob_refcnt; | |
| #else | |
| uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local); | |
| if (local == _Py_IMMORTAL_REFCNT_LOCAL) { | |
| return _Py_IMMORTAL_INITIAL_REFCNT; | |
| } | |
| Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared); | |
| return _Py_STATIC_CAST(Py_ssize_t, local) + | |
| Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT); | |
| #endif | |
| } | |
| #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 | |
| # define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob)) | |
| #endif | |
| #endif |
In Python 3.14 Py_REFCNT is moved to become a function in the stable ABI. This works fine. If you use a Py_LIMITED_API version less that 3.14 then it generates _Py_REFCNT as an inline function.
On Limited API versions less than 3.11 then it defined Py_REFCNT to be _Py_REFCNT plus a cast. However on Py_LIMITED_API versions between 3.11 and 3.14 then it doesn't work - Py_REFCNT is defined as a function but isn't in the stable ABI.
See wjakob/nanobind#1183 for this in the wild.
CPython versions tested on:
3.14
Operating systems tested on:
Linux
Linked PRs
Metadata
Metadata
Assignees
Labels
3.14bugs and security fixesbugs and security fixes3.15new features, bugs and security fixesnew features, bugs and security fixestopic-C-APItype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error