mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-24 02:37:23 +08:00
Don't steal references in the gdb Python code
Some Python APIs steal references from their caller, and the refcount checker supports this via an attribute. However, in gdb with C++ we have a better idiom available: we can use std::move on a gdbpy_ref<> instead. This makes the semantics obvious at the point of call, and is safer at runtime as well, because the callee's gdbpy_ref<> will be emptied. This patch changes the reference-stealing code in gdb to use rvalue references instead. Tested on x86-64 Fedora 28. gdb/ChangeLog 2018-09-16 Tom Tromey <tom@tromey.com> * python/python-internal.h (CPYCHECKER_STEALS_REFERENCE_TO_ARG): Remove. * python/py-varobj.c (py_varobj_iter_ctor): Change pyiter to rvalue reference. Remove CPYCHECKER_STEALS_REFERENCE_TO_ARG. (py_varobj_iter_new): Likewise. (py_varobj_get_iterator): Use gdbpy_ref.
This commit is contained in:
@ -38,13 +38,6 @@
|
||||
#define CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF(ARG)
|
||||
#endif
|
||||
|
||||
#ifdef WITH_CPYCHECKER_STEALS_REFERENCE_TO_ARG_ATTRIBUTE
|
||||
#define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n) \
|
||||
__attribute__ ((cpychecker_steals_reference_to_arg (n)))
|
||||
#else
|
||||
#define CPYCHECKER_STEALS_REFERENCE_TO_ARG(n)
|
||||
#endif
|
||||
|
||||
#ifdef WITH_CPYCHECKER_SETS_EXCEPTION_ATTRIBUTE
|
||||
#define CPYCHECKER_SETS_EXCEPTION __attribute__ ((cpychecker_sets_exception))
|
||||
#else
|
||||
|
Reference in New Issue
Block a user