diff --git a/llvm/lib/Demangle/RustDemangle.cpp b/llvm/lib/Demangle/RustDemangle.cpp --- a/llvm/lib/Demangle/RustDemangle.cpp +++ b/llvm/lib/Demangle/RustDemangle.cpp @@ -109,7 +109,9 @@ Error = true; return false; } - Input = Mangled; + size_t Dot = Mangled.find('.'); + Input = Mangled.substr(0, Dot); + StringView Suffix = Mangled.dropFront(Dot); demanglePath(rust_demangle::InType::No); @@ -121,6 +123,12 @@ if (Position != Input.size()) Error = true; + if (!Suffix.empty()) { + print(" ("); + print(Suffix); + print(")"); + } + return !Error; } diff --git a/llvm/test/Demangle/rust.test b/llvm/test/Demangle/rust.test --- a/llvm/test/Demangle/rust.test +++ b/llvm/test/Demangle/rust.test @@ -448,6 +448,14 @@ CHECK: _RIC7backrefKBa_E _RIC7backrefKBa_E +; Dot suffix + +CHECK: dot (.llvm.1234) + _RC3dot.llvm.1234 + +CHECK: dot (.llvm.6789) + _RC3dotC5crate.llvm.6789 + ; Invalid mangled characters CHECK: _RNvC2a.1c