]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Fix find_type helper to work consistently
authorJonathan Wakely <jwakely@redhat.com>
Thu, 11 Mar 2021 16:48:32 +0000 (16:48 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 11 Mar 2021 17:52:56 +0000 (17:52 +0000)
The find_type helper function sometimes results in "class X::name" and
lookup for that fails. For more details see "Problem 1" in
https://gcc.gnu.org/pipermail/libstdc++/2021-March/052132.html and the
example at https://sourceware.org/bugzilla/show_bug.cgi?id=27510#c2

This patch replaces typ.unqualified() with typ.tag, which is never
qualified, and will never include the 'class' or 'struct' keywords.
Using the .tag attribute should be safe here because we know we are
looking at a class type and we've already used strip_typedefs().

libstdc++-v3/ChangeLog:

* python/libstdcxx/v6/printers.py (find_type): Use tag attribute
instead of unqualified() method.

libstdc++-v3/python/libstdcxx/v6/printers.py

index 00db6cb4e82d736e99d48a644400409feb0a3eb1..550e0ecdd222bff9863533a263212af5c2bd12ee 100644 (file)
@@ -85,8 +85,8 @@ except ImportError:
 def find_type(orig, name):
     typ = orig.strip_typedefs()
     while True:
-        # Strip cv-qualifiers.  PR 67440.
-        search = '%s::%s' % (typ.unqualified(), name)
+        # Use Type.tag to ignore cv-qualifiers.  PR 67440.
+        search = '%s::%s' % (typ.tag, name)
         try:
             return gdb.lookup_type(search)
         except RuntimeError: