From 1a3389079dd5c93419846f44d42027a526ce19cf Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 16 Sep 2018 07:32:23 -0600 Subject: 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 * 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. --- gdb/python/python-internal.h | 7 ------- 1 file changed, 7 deletions(-) (limited to 'gdb/python/python-internal.h') diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index dc42978..e32502d 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -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 -- cgit v1.1