On Tue, 2021-10-05 at 18:13 +0100, Luís Ferreira wrote: > This patch fixes a bug on the D demangler by parsing and skip anonymous > symbols > correctly, according the ABI specification. Furthermore, it also > includes tests > to cover anonymous symbols. > > The spec specifies [1] that a symbol name can be anonymous and multiple > anonymous symbols are allowed. > > [1]: https://dlang.org/spec/abi.html#SymbolName > > ChangeLog: > libiberty/ > * d-demangle.c (dlang_parse_qualified): Handle anonymous > symbols > correctly. > > * testsuite/d-demangle-expected: New tests to cover anonymous > symbols. > > Signed-off-by: Luís Ferreira <cont...@lsferreira.net> > --- > libiberty/d-demangle.c | 13 +++++++++---- > libiberty/testsuite/d-demangle-expected | 8 ++++++++ > 2 files changed, 17 insertions(+), 4 deletions(-) > > diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c > index 3adf7b562d1..682f73f9923 100644 > --- a/libiberty/d-demangle.c > +++ b/libiberty/d-demangle.c > @@ -1650,13 +1650,18 @@ dlang_parse_qualified (string *decl, const char > *mangled, > size_t n = 0; > do > { > + /* Skip over anonymous symbols. */ > + if (*mangled == '0') > + { > + do mangled++; > + while (*mangled == '0'); > + > + continue; > + } > + > if (n++) > string_append (decl, "."); > > - /* Skip over anonymous symbols. */ > - while (*mangled == '0') > - mangled++; > - > mangled = dlang_identifier (decl, mangled, info); > > /* Consume the encoded arguments. However if this is not > followed by the > diff --git a/libiberty/testsuite/d-demangle-expected > b/libiberty/testsuite/d-demangle-expected > index 44a3649c429..9459f600779 100644 > --- a/libiberty/testsuite/d-demangle-expected > +++ b/libiberty/testsuite/d-demangle-expected > @@ -1450,3 +1450,11 @@ mod.func().nested!(int).nested() > --format=dlang > _D6mangle__T8fun21753VSQv6S21753S1f_DQBj10__lambda71MFNaNbNiNfZvZQCbQp > mangle.fun21753!(mangle.S21753(mangle.__lambda71())).fun21753 > +# > +--format=dlang > +_D8demangle9anonymous0Z > +demangle.anonymous > +# > +--format=dlang > +_D8demangle9anonymous03fooZ > +demangle.anonymous.foo
Updated ChangeLog: ChangeLog: libiberty/ PR bugzilla_component/102618 * d-demangle.c (dlang_parse_qualified): Handle anonymous symbols correctly. * testsuite/d-demangle-expected: New tests to cover anonymous symbols. -- Sincerely, Luís Ferreira @ lsferreira.net
signature.asc
Description: This is a digitally signed message part