Handle result from PyObject_VisitManagedDict (#6032)

* Handle result from PyObject_VisitManagedDict

* add unit test

* style: pre-commit fixes

* use different variable name

This avoids a warning on msvc about Py_Visit shadowing the vret variable.

* skip test_get_referrers on unsupported runtimes

The managed-dict referrer check is only known to work on CPython 3.13.13+ and 3.14.4+, while earlier releases and non-CPython interpreters can report different traversal behavior.

Made-with: Cursor

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Ralf W. Grosse-Kunstleve <rgrossekunst@nvidia.com>
This commit is contained in:
Max Bachmann
2026-04-12 05:02:27 +02:00
committed by Ralf W. Grosse-Kunstleve
parent 98003e29c8
commit e2fdf43609
3 changed files with 28 additions and 1 deletions

View File

@@ -104,6 +104,10 @@ TEST_SUBMODULE(class_, m) {
~NoConstructorNew() { print_destroyed(this); }
};
struct DynamicAttr {
DynamicAttr() = default;
};
py::class_<NoConstructor>(m, "NoConstructor")
.def_static("new_instance", &NoConstructor::new_instance, "Return an instance");
@@ -112,6 +116,8 @@ TEST_SUBMODULE(class_, m) {
.def_static("__new__",
[](const py::object &) { return NoConstructorNew::new_instance(); });
py::class_<DynamicAttr>(m, "DynamicAttr", py::dynamic_attr()).def(py::init<>());
// test_pass_unique_ptr
struct ToBeHeldByUniquePtr {};
py::class_<ToBeHeldByUniquePtr, std::unique_ptr<ToBeHeldByUniquePtr>>(m, "ToBeHeldByUniquePtr")