http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48362

           Summary: pretty printer fails for zero-size std::tuple<>
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: r...@gcc.gnu.org
                CC: tro...@gcc.gnu.org


trying to print a std::tuple<> fails

(gdb) ptype t
type = class std::tuple<> {
  public:
    void swap(std::tuple<> &);
}
(gdb) p t
$1 = std::tuple containingTraceback (most recent call last):
  File
"/home/wakelj/tools/Linux-x86_64/test/share/gcc-4.6.0/python/libstdcxx/v6/printers.py",
line 290, in children
    return self._iterator (self.val)
  File
"/home/wakelj/tools/Linux-x86_64/test/share/gcc-4.6.0/python/libstdcxx/v6/printers.py",
line 248, in __init__
    raise ValueError, "Top of tuple tree does not consist of a single node."
ValueError: Top of tuple tree does not consist of a single node.


The following patch is a quick hack to prevent the error, but produces the
unhelpful output:
(gdb) p t
$1 = std::tuple containing
(gdb)

--- python/libstdcxx/v6/printers.py.orig        2011-03-30 11:44:33.786660891
+0000
+++ python/libstdcxx/v6/printers.py     2011-03-30 11:46:33.570222630 +0000
@@ -244,6 +244,10 @@
             # Set the base class as the initial head of the
             # tuple.
             nodes = self.head.type.fields ()
+            if len (nodes) == 0:
+                self.count = -1
+                return
+
             if len (nodes) != 1:
                 raise ValueError, "Top of tuple tree does not consist of a
single node."

@@ -255,6 +259,8 @@
             return self

         def next (self):
+            if self.count == -1:
+                raise StopIteration
             nodes = self.head.type.fields ()
             # Check for further recursions in the inheritance tree.
             if len (nodes) == 0:

Reply via email to