https://gcc.gnu.org/g:a4921df13f034bbd2c8a08bfff0a39b3fe7512e5
commit r15-10614-ga4921df13f034bbd2c8a08bfff0a39b3fe7512e5 Author: Vladimir Bespalov <[email protected]> Date: Sat Nov 22 19:58:08 2025 -0800 libstdc++: Fix pretty printer lookup for class templates [PR122812] Under some circumstances the type.name of a pair<> type starts with "struct". This confuses GDB when we use gdb.lookup_type for the name of template specialization using "struct pair<...>" in its template argument list. Using type.tag avoids this problem. libstdc++-v3/ChangeLog: PR libstdc++/122812 * python/libstdcxx/v6/printers.py (lookup_templ_spec): Use gdb.Type.tag if present. (cherry picked from commit dce0d564d742617f71297c88e4a1c0d6038f2c47) Diff: --- libstdc++-v3/python/libstdcxx/v6/printers.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py index 5f5963cb5954..052a99a28ed5 100644 --- a/libstdc++-v3/python/libstdcxx/v6/printers.py +++ b/libstdc++-v3/python/libstdcxx/v6/printers.py @@ -133,7 +133,11 @@ def lookup_templ_spec(templ, *args): """ Lookup template specialization templ<args...>. """ - t = '{}<{}>'.format(templ, ', '.join([str(a) for a in args])) + # Similar to PR67440, str(a) might contain unexpected type qualifiers. + t = '{}<{}>'.format(templ, ', '.join([ \ + a.tag if isinstance(a, gdb.Type) and a.tag \ + else str(a) \ + for a in args])) try: return gdb.lookup_type(t) except gdb.error as e:
