+2018-01-09 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/80276
+ * python/libstdcxx/v6/printers.py (SharedPointerPrinter)
+ (UniquePointerPrinter): Print correct template argument, not type of
+ the pointer.
+ (TemplateTypePrinter._recognizer.recognize): Handle failure to lookup
+ a type.
+ * testsuite/libstdc++-prettyprinters/cxx11.cc: Test unique_ptr of
+ array type.
+ * testsuite/libstdc++-prettyprinters/cxx17.cc: Test shared_ptr and
+ weak_ptr of array types.
+
2018-01-09 François Dumont <fdumont@gcc.gnu.org>
PR libstdc++/83709
state = 'expired, weak count %d' % weakcount
else:
state = 'use count %d, weak count %d' % (usecount, weakcount - 1)
- return '%s<%s> (%s)' % (self.typename, str(self.pointer.type.target().strip_typedefs()), state)
+ return '%s<%s> (%s)' % (self.typename, str(self.val.type.template_argument(0)), state)
class UniquePointerPrinter:
"Print a unique_ptr"
return SmartPtrIterator(self.pointer)
def to_string (self):
- return ('std::unique_ptr<%s>' % (str(self.pointer.type.target())))
+ return ('std::unique_ptr<%s>' % (str(self.val.type.template_argument(0))))
def get_value_from_aligned_membuf(buf, valtype):
"""Returns the value held in a __gnu_cxx::__aligned_membuf."""
for i, sub in enumerate(subs):
if ('{%d}' % (i+1)) in self.subst:
# apply recognizers to subgroup
+ try:
+ subtype = gdb.lookup_type(sub)
+ except gdb.error:
+ continue
rep = gdb.types.apply_type_recognizers(
gdb.types.get_type_recognizers(),
- gdb.lookup_type(sub))
+ subtype)
if rep:
subs[i] = rep
subs = [None] + subs
std::unique_ptr<datum> &ruptr = uptr;
// { dg-final { regexp-test ruptr {std::unique_ptr.datum. = {get\(\) = 0x.*}} } }
+ using data = datum[];
+ std::unique_ptr<data> arrptr (new datum[2]);
+// { dg-final { regexp-test arrptr {std::unique_ptr.datum \[\]. = {get\(\) = 0x.*}} } }
+ std::unique_ptr<data>& rarrptr = arrptr;
+// { dg-final { regexp-test rarrptr {std::unique_ptr.datum \[\]. = {get\(\) = 0x.*}} } }
+
ExTuple tpl(6,7);
// { dg-final { note-test tpl {std::tuple containing = {[1] = 6, [2] = 7}} } }
ExTuple &rtpl = tpl;
use(eums);
use(uoms);
use(uptr->s);
+ use(arrptr[0].s);
std::cout << "\n";
return 0;
#include <string>
#include <map>
#include <unordered_set>
+#include <memory>
#include <iostream>
using std::any;
using std::string_view;
using std::map;
using std::unordered_set;
+using std::shared_ptr;
+using std::weak_ptr;
int
main()
unordered_set<int>::node_type n3 = s.extract(3);
// { dg-final { note-test n1 {node handle for unordered set with element = {3}}}}
+ shared_ptr<int[]> p(new int[1]);
+ weak_ptr wp = p;
+ weak_ptr wp2 = p;
+// { dg-final { regexp-test p {std::shared_ptr.int \[\]. \(use count 1, weak count 2\) = {get\(\) = 0x.*}} } }
+// { dg-final { regexp-test wp {std::weak_ptr.int \[\]. \(use count 1, weak count 2\) = {get\(\) = 0x.*}} } }
+
+ shared_ptr<int[2]> q(new int[2]);
+ shared_ptr q2 = q;
+ weak_ptr wq = q;
+// { dg-final { regexp-test q {std::shared_ptr.int \[2\]. \(use count 2, weak count 1\) = {get\(\) = 0x.*}} } }
+// { dg-final { regexp-test wq {std::weak_ptr.int \[2\]. \(use count 2, weak count 1\) = {get\(\) = 0x.*}} } }
+
std::cout << "\n";
return 0; // Mark SPOT
}