libiberty rust-demangle, ignore .suffix
authorMark Wielaard <mark@klomp.org>
Thu, 2 Dec 2021 17:00:39 +0000 (18:00 +0100)
committerMark Wielaard <mark@klomp.org>
Thu, 17 Feb 2022 17:06:24 +0000 (18:06 +0100)
commitd3b2ead595467166c849950ecd3710501a5094d9
treed2048ccfc0473ef3ebfc732160330481a5697f93
parentdb69f666a728ce800a840115829f6b64bc3174d2
libiberty rust-demangle, ignore .suffix

Rust symbols can have a .suffix because of compiler transformations.
These can be ignored in the demangled name. Which is what this patch
implements. By stopping at the first dot for v0 symbols and searching
backwards to the ending 'E' for legacy symbols.

An alternative implementation could be to follow what C++ does and
represent these as [clone .suffix] tagged onto the demangled name.
But this seems somewhat confusing since it results in a demangled
name that cannot be mangled again. And it would mean trying to
decode compiler internal naming.

https://bugs.kde.org/show_bug.cgi?id=445916
https://github.com/rust-lang/rust/issues/60705

libiberty/Changelog

* rust-demangle.c (rust_demangle_callback): Ignore everything
after '.' char in sym for v0. For legacy symbols search
backwards to find the last 'E' before any '.'.
* testsuite/rust-demangle-expected: Add new .suffix testcases.
libiberty/rust-demangle.c
libiberty/testsuite/rust-demangle-expected