[PATCH] Fix DEMANGLE_COMPONENT_TEMPLATE_ARGLIST demangling (PR other/43838)

Jakub Jelinek jakub@redhat.com
Thu Jun 10 07:37:00 GMT 2010


On Wed, Jun 09, 2010 at 05:17:21PM -0700, Ian Lance Taylor wrote:
> Jakub Jelinek <jakub@redhat.com> writes:
> 
> > On Wed, Jun 09, 2010 at 01:03:08PM -0700, Ian Lance Taylor wrote:
> >> I suppose this is OK, but it seems simpler and cleaner to just check
> >> whether the d_print_comp will print anything before appending the
> >> comma.  It seems like it should work to do
> >> 
> >>     struct demangle_component *right = d_right (dc);
> >>     if (right != NULL && (d_left (right) != NULL || d_right (right) != NULL))
> >>       {
> >>         d_append_string (dpi, ", ");
> >>         d_print_comp (dpi, right);
> >>       }
> >
> > I believe e.g. DEMANGLE_COMPONENT_PACK_EXPANSION can print nothing
> > if d_find_pack returns non-NULL, but d_pack_length is 0.
> > Not sure if that's the only possibility.
> 
> I don't quite see how that can happen, but I don't have time to look
> into this, so I'll approve your patch.

E.g.:

cplus_demangle ("_Z1fIIEEviDpT_", DMGL_PARAMS)

With your patch it gives
void f<>(int, )
and with my patch (likewise for current libiberty)
void f<>(int)

right is != NULL, but d_left (right) != NULL too.  d_left (right)
is DEMANGLE_COMPONENT_PACK_EXPANSION with d_pack_length (d_find_pack ()) ==
0.

I guess we'd need to write a function like d_print_comp that would return
true if d_print_comp will actually print any characters if we wanted to
avoid this printing + undo.

	Jakub



More information about the Binutils mailing list