summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfdumont <fdumont@138bc75d-0d04-0410-961f-82ee72b054a4>2018-03-08 06:26:15 +0000
committerfdumont <fdumont@138bc75d-0d04-0410-961f-82ee72b054a4>2018-03-08 06:26:15 +0000
commitdb4f7f88497d7a823854f87f6650bdc12b584372 (patch)
treec8971f9b08ecacf0a0c34b693147b5c9e064415a
parent7a8585359cac45e03c5f5d14307badf492e713b8 (diff)
downloadgcc-db4f7f88497d7a823854f87f6650bdc12b584372.tar.gz
2018-03-08 François Dumont <fdumont@gcc.gnu.org>
* python/libstdcxx/v6/printers.py (NodeIteratorPrinter): New. (StdListIteratorPrinter): Inherit from latter. (StdFwdListIteratorPrinter): New, inherit from latter. (StdDebugIteratorPrinter.to_string): Use non-debug iterator printer when iterator has no associated container. (build_libstdcxx_dictionary): Add __gnu_cxx::_Fwd_list_iterator and __gnu_cxx::_Fwd_list_const_iterator printers. Remove __norm namespace registrations. * testsuite/libstdc++-prettyprinters/debug.cc: Adapt. * testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Adapt. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258350 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libstdc++-v3/ChangeLog13
-rw-r--r--libstdc++-v3/python/libstdcxx/v6/printers.py44
-rw-r--r--libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc6
-rw-r--r--libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc6
4 files changed, 46 insertions, 23 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index b0b3a956ace..69c6ec6d29d 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,16 @@
+2018-03-08 François Dumont <fdumont@gcc.gnu.org>
+
+ * python/libstdcxx/v6/printers.py (NodeIteratorPrinter): New.
+ (StdListIteratorPrinter): Inherit from latter.
+ (StdFwdListIteratorPrinter): New, inherit from latter.
+ (StdDebugIteratorPrinter.to_string): Use non-debug iterator printer
+ when iterator has no associated container.
+ (build_libstdcxx_dictionary): Add __gnu_cxx::_Fwd_list_iterator and
+ __gnu_cxx::_Fwd_list_const_iterator printers. Remove __norm namespace
+ registrations.
+ * testsuite/libstdc++-prettyprinters/debug.cc: Adapt.
+ * testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Adapt.
+
2018-03-06 Ville Voutilainen <ville.voutilainen@gmail.com>
PR libstdc++/84601
diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py
index c490880cd10..b5f76f20810 100644
--- a/libstdc++-v3/python/libstdcxx/v6/printers.py
+++ b/libstdc++-v3/python/libstdcxx/v6/printers.py
@@ -249,21 +249,32 @@ class StdListPrinter:
return 'empty %s' % (self.typename)
return '%s' % (self.typename)
-class StdListIteratorPrinter:
- "Print std::list::iterator"
-
- def __init__(self, typename, val):
+class NodeIteratorPrinter:
+ def __init__(self, typename, val, contname):
self.val = val
self.typename = typename
+ self.contname = contname
def to_string(self):
if not self.val['_M_node']:
- return 'non-dereferenceable iterator for std::list'
+ return 'non-dereferenceable iterator for std::%s' % (self.contname)
nodetype = find_type(self.val.type, '_Node')
nodetype = nodetype.strip_typedefs().pointer()
node = self.val['_M_node'].cast(nodetype).dereference()
return str(get_value_from_list_node(node))
+class StdListIteratorPrinter(NodeIteratorPrinter):
+ "Print std::list::iterator"
+
+ def __init__(self, typename, val):
+ NodeIteratorPrinter.__init__(self, typename, val, 'list')
+
+class StdFwdListIteratorPrinter(NodeIteratorPrinter):
+ "Print std::forward_list::iterator"
+
+ def __init__(self, typename, val):
+ NodeIteratorPrinter.__init__(self, typename, val, 'forward_list')
+
class StdSlistPrinter:
"Print a __gnu_cxx::slist"
@@ -575,10 +586,12 @@ class StdDebugIteratorPrinter:
# and return the wrapped iterator value.
def to_string (self):
base_type = gdb.lookup_type('__gnu_debug::_Safe_iterator_base')
+ itype = self.val.type.template_argument(0)
safe_seq = self.val.cast(base_type)['_M_sequence']
- if not safe_seq or self.val['_M_version'] != safe_seq['_M_version']:
+ if not safe_seq:
+ return str(self.val.cast(itype))
+ if self.val['_M_version'] != safe_seq['_M_version']:
return "invalid iterator"
- itype = self.val.type.template_argument(0)
return str(self.val.cast(itype))
def num_elements(num):
@@ -1731,21 +1744,14 @@ def build_libstdcxx_dictionary ():
StdVectorIteratorPrinter)
libstdcxx_printer.add_version('__gnu_cxx::', '_Slist_iterator',
StdSlistIteratorPrinter)
+ libstdcxx_printer.add_version('__gnu_cxx::', '_Fwd_list_iterator',
+ StdFwdListIteratorPrinter)
+ libstdcxx_printer.add_version('__gnu_cxx::', '_Fwd_list_const_iterator',
+ StdFwdListIteratorPrinter)
# Debug (compiled with -D_GLIBCXX_DEBUG) printer
- # registrations. The Rb_tree debug iterator when unwrapped
- # from the encapsulating __gnu_debug::_Safe_iterator does not
- # have the __norm namespace. Just use the existing printer
- # registration for that.
+ # registrations.
libstdcxx_printer.add('__gnu_debug::_Safe_iterator',
StdDebugIteratorPrinter)
- libstdcxx_printer.add('std::__norm::_List_iterator',
- StdListIteratorPrinter)
- libstdcxx_printer.add('std::__norm::_List_const_iterator',
- StdListIteratorPrinter)
- libstdcxx_printer.add('std::__norm::_Deque_const_iterator',
- StdDequeIteratorPrinter)
- libstdcxx_printer.add('std::__norm::_Deque_iterator',
- StdDequeIteratorPrinter)
build_libstdcxx_dictionary ()
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
index 72b2eeb29b2..9f7f7631219 100644
--- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug.cc
@@ -19,7 +19,9 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#define _GLIBCXX_DEBUG
+#ifndef _GLIBCXX_DEBUG
+# define _GLIBCXX_DEBUG
+#endif
#include <string>
#include <deque>
@@ -96,7 +98,7 @@ main()
v.push_back(1);
v.push_back(2);
std::vector<int>::iterator viter0;
-// { dg-final { note-test viter0 {invalid iterator} } }
+// { dg-final { note-test viter0 {non-dereferenceable iterator for std::vector} } }
std::vector<int>::iterator viter1 = v.begin();
std::vector<int>::iterator viter2 = viter1 + 1;
v.erase(viter1);
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc
index 5d9835099e7..1990084e3e5 100644
--- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/debug_cxx11.cc
@@ -19,7 +19,9 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-#define _GLIBCXX_DEBUG
+#ifndef _GLIBCXX_DEBUG
+# define _GLIBCXX_DEBUG
+#endif
#include <forward_list>
#include <unordered_map>
@@ -31,7 +33,7 @@ main()
{
std::forward_list<std::string> flst;
std::forward_list<std::string>::iterator flstiter0;
-// { dg-final { note-test flstiter0 {invalid iterator}} }
+// { dg-final { note-test flstiter0 {non-dereferenceable iterator for std::forward_list}} }
flst.push_front("dum");
std::forward_list<std::string>::iterator flstiter1 = flst.begin();
// { dg-final { note-test *flstiter1 {"dum"}} }