> On Tuesday, 4 May 2021 15:34:13 CEST David Malcolm wrote: > > Does the patch interact correctly with the %H and %I codes that try to > > show the differences between two template types?
While looking into this, I noticed that given namespace std { struct A {}; typedef A B; } const std::B would print as "'const B' {aka 'const std::A'}", i.e. without printing the scope of the typedef. I traced it to cp/error.c (dump_type). In the `if (TYPE_P (t) && typedef_variant_p (t))` branch, in the final else branch only cv-qualifiers and identifier are printed: pp_cxx_cv_qualifier_seq (pp, t); pp_cxx_tree_identifier (pp, TYPE_IDENTIFIER (t)); I believe the following should go in between, correct? pp_cxx_cv_qualifier_seq (pp, t); if (! (flags & TFF_UNQUALIFIED_NAME)) dump_scope (pp, CP_DECL_CONTEXT (TYPE_NAME (t)), flags); pp_cxx_tree_identifier (pp, TYPE_IDENTIFIER (t)); This is important for my diagnose_as patch because otherwise the output is: 'const string' {aka 'const std::string'} which is confusing and unnecessarily verbose. Patch below. From: Matthias Kretz <kr...@kde.org> dump_type on 'const std::string' should not print 'const string' unless TFF_UNQUALIFIED_NAME is requested. gcc/cp/ChangeLog: * error.c: Call dump_scope when printing a typedef. --- gcc/cp/error.c | 2 ++ 1 file changed, 2 insertions(+) -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de std::experimental::simd https://github.com/VcDevel/std-simd ──────────────────────────────────────────────────────────────────────────
diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 10b547afaa7..edeaad44bcd 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -511,6 +511,8 @@ dump_type (cxx_pretty_printer *pp, tree t, int flags) else { pp_cxx_cv_qualifier_seq (pp, t); + if (! (flags & TFF_UNQUALIFIED_NAME)) + dump_scope (pp, CP_DECL_CONTEXT (TYPE_NAME (t)), flags); pp_cxx_tree_identifier (pp, TYPE_IDENTIFIER (t)); return; }