libstdc++: Fix GDB Xmethod for std::shared_ptr::use_count() [PR109064]
libstdc++-v3/ChangeLog: PR libstdc++/109064 * python/libstdcxx/v6/xmethods.py (SharedPtrUseCountWorker): Remove self-recursion in __init__. Add missing _supports. * testsuite/libstdc++-xmethods/shared_ptr.cc: Check use_count() and unique().
This commit is contained in:
parent
e3f8dfcd88
commit
37c8a083d4
2 changed files with 11 additions and 1 deletions
|
@ -730,7 +730,7 @@ class SharedPtrUseCountWorker(gdb.xmethod.XMethodWorker):
|
|||
"Implements std::shared_ptr<T>::use_count()"
|
||||
|
||||
def __init__(self, elem_type):
|
||||
SharedPtrUseCountWorker.__init__(self, elem_type)
|
||||
pass
|
||||
|
||||
def get_arg_types(self):
|
||||
return None
|
||||
|
@ -738,6 +738,9 @@ class SharedPtrUseCountWorker(gdb.xmethod.XMethodWorker):
|
|||
def get_result_type(self, obj):
|
||||
return gdb.lookup_type('long')
|
||||
|
||||
def _supports(self, method_name):
|
||||
return True
|
||||
|
||||
def __call__(self, obj):
|
||||
refcounts = obj['_M_refcount']['_M_pi']
|
||||
return refcounts['_M_use_count'] if refcounts else 0
|
||||
|
|
|
@ -37,6 +37,8 @@ main ()
|
|||
|
||||
std::shared_ptr<x_struct[3]> s(new x_struct[2]{ {92}, {115} });
|
||||
|
||||
auto qq = q;
|
||||
|
||||
// { dg-final { note-test *p 10 } }
|
||||
// { dg-final { regexp-test p.get() 0x.* } }
|
||||
|
||||
|
@ -67,6 +69,11 @@ main ()
|
|||
// { dg-final { whatis-test s.get() "x_struct \*" } }
|
||||
// { dg-final { whatis-test s\[1].y int } }
|
||||
|
||||
// { dg-final { note-test p.use_count() 1 } }
|
||||
// { dg-final { note-test p.unique() true } }
|
||||
// { dg-final { note-test q.use_count() 2 } }
|
||||
// { dg-final { note-test q.unique() false } }
|
||||
|
||||
return 0; // Mark SPOT
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue