d3b2ead595
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.
324 lines
10 KiB
Plaintext
324 lines
10 KiB
Plaintext
# This file holds test cases for the Rust demangler.
|
|
# Each test case looks like this:
|
|
# options
|
|
# input to be demangled
|
|
# expected output
|
|
#
|
|
# See demangle-expected for documentation of supported options.
|
|
#
|
|
# A line starting with `#' is ignored.
|
|
# However, blank lines in this file are NOT ignored.
|
|
#
|
|
############
|
|
#
|
|
# Coverage Tests (legacy)
|
|
#
|
|
#
|
|
# Demangles as rust symbol.
|
|
--format=rust
|
|
_ZN4main4main17he714a2e23ed7db23E
|
|
main::main
|
|
# Also demangles as c++ gnu v3 mangled symbol. But with extra Rust hash.
|
|
--format=gnu-v3
|
|
_ZN4main4main17he714a2e23ed7db23E
|
|
main::main::he714a2e23ed7db23
|
|
# But auto should demangle fully gnu-v3 -> rust -> demangled, not partially.
|
|
--format=auto
|
|
_ZN4main4main17he714a2e23ed7db23E
|
|
main::main
|
|
# Hash is exactly 16 hex chars. Not more.
|
|
--format=auto
|
|
_ZN4main4main18h1e714a2e23ed7db23E
|
|
main::main::h1e714a2e23ed7db23
|
|
# Not less.
|
|
--format=auto
|
|
_ZN4main4main16h714a2e23ed7db23E
|
|
main::main::h714a2e23ed7db23
|
|
# And not non-hex.
|
|
--format=auto
|
|
_ZN4main4main17he714a2e23ed7db2gE
|
|
main::main::he714a2e23ed7db2g
|
|
# $XX$ substitutions should not contain just numbers.
|
|
--format=auto
|
|
_ZN4main4$99$17he714a2e23ed7db23E
|
|
main::$99$
|
|
# _ at start of path should be removed.
|
|
# ".." translates to "::" "$GT$" to ">" and "$LT$" to "<".
|
|
--format=rust
|
|
_ZN71_$LT$Test$u20$$u2b$$u20$$u27$static$u20$as$u20$foo..Bar$LT$Test$GT$$GT$3bar17h930b740aa94f1d3aE
|
|
<Test + 'static as foo::Bar<Test>>::bar
|
|
#
|
|
--format=rust
|
|
_ZN54_$LT$I$u20$as$u20$core..iter..traits..IntoIterator$GT$9into_iter17h8581507801fb8615E
|
|
<I as core::iter::traits::IntoIterator>::into_iter
|
|
#
|
|
--format=rust
|
|
_ZN10parse_tsan4main17hdbbfdf1c6a7e27d9E
|
|
parse_tsan::main
|
|
#
|
|
--format=rust
|
|
_ZN65_$LT$std..env..Args$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h420a7c8d0c7eef40E
|
|
<std::env::Args as core::iter::iterator::Iterator>::next
|
|
#
|
|
--format=rust
|
|
_ZN4core3str9from_utf817hdcea28871313776dE
|
|
core::str::from_utf8
|
|
#
|
|
--format=rust
|
|
_ZN4core3mem7size_of17h18bde9bb8c22e2cfE
|
|
core::mem::size_of
|
|
#
|
|
--format=rust
|
|
_ZN5alloc4heap8allocate17hd55c03e6cb81d924E
|
|
alloc::heap::allocate
|
|
#
|
|
--format=rust
|
|
_ZN4core3ptr8null_mut17h736cce09ca0ac11aE
|
|
core::ptr::null_mut
|
|
#
|
|
--format=rust
|
|
_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h7f9de798bc3f0879E
|
|
core::ptr::<impl *mut T>::is_null
|
|
#
|
|
--format=rust
|
|
_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$6double17h4166e2b47539e1ffE
|
|
<alloc::raw_vec::RawVec<T>>::double
|
|
#
|
|
--format=rust
|
|
_ZN39_$LT$collections..vec..Vec$LT$T$GT$$GT$4push17hd4b6b23c1b88141aE
|
|
<collections::vec::Vec<T>>::push
|
|
#
|
|
--format=rust
|
|
_ZN70_$LT$collections..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..DerefMut$GT$9deref_mut17hf299b860dc5a831cE
|
|
<collections::vec::Vec<T> as core::ops::DerefMut>::deref_mut
|
|
#
|
|
--format=rust
|
|
_ZN63_$LT$core..ptr..Unique$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17hc784b4a166cb5e5cE
|
|
<core::ptr::Unique<T> as core::ops::Deref>::deref
|
|
#
|
|
--format=rust
|
|
_ZN40_$LT$alloc..raw_vec..RawVec$LT$T$GT$$GT$3ptr17h7570b6e9070b693bE
|
|
<alloc::raw_vec::RawVec<T>>::ptr
|
|
#
|
|
--format=rust
|
|
_ZN4core3ptr31_$LT$impl$u20$$BP$mut$u20$T$GT$7is_null17h0f3228f343444ac8E
|
|
core::ptr::<impl *mut T>::is_null
|
|
#
|
|
--format=rust
|
|
_ZN53_$LT$$u5b$T$u5d$$u20$as$u20$core..slice..SliceExt$GT$10as_mut_ptr17h153241df1c7d1666E
|
|
<[T] as core::slice::SliceExt>::as_mut_ptr
|
|
#
|
|
--format=rust
|
|
_ZN11collections5slice29_$LT$impl$u20$$u5b$T$u5d$$GT$10as_mut_ptr17hf12a6d0409938c96E
|
|
collections::slice::<impl [T]>::as_mut_ptr
|
|
#
|
|
--format=rust
|
|
_ZN4core3ptr5write17h651fe53ec860e780E
|
|
core::ptr::write
|
|
#
|
|
--format=rust
|
|
_ZN65_$LT$std..env..Args$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h420a7c8d0c7eef40E
|
|
<std::env::Args as core::iter::iterator::Iterator>::next
|
|
#
|
|
--format=rust
|
|
_ZN54_$LT$I$u20$as$u20$core..iter..traits..IntoIterator$GT$9into_iter17he06cb713aae5b465E
|
|
<I as core::iter::traits::IntoIterator>::into_iter
|
|
#
|
|
--format=rust
|
|
_ZN71_$LT$collections..vec..IntoIter$LT$T$GT$$u20$as$u20$core..ops..Drop$GT$4drop17hf7f23304ebe62eedE
|
|
<collections::vec::IntoIter<T> as core::ops::Drop>::drop
|
|
#
|
|
--format=rust
|
|
_ZN86_$LT$collections..vec..IntoIter$LT$T$GT$$u20$as$u20$core..iter..iterator..Iterator$GT$4next17h04b3fbf148c39713E
|
|
<collections::vec::IntoIter<T> as core::iter::iterator::Iterator>::next
|
|
#
|
|
--format=rust
|
|
_ZN75_$LT$$RF$$u27$a$u20$mut$u20$I$u20$as$u20$core..iter..iterator..Iterator$GT$4next17ha050492063e0fd20E
|
|
<&'a mut I as core::iter::iterator::Iterator>::next
|
|
# Different hashes are OK, they are just stripped.
|
|
--format=rust
|
|
_ZN13drop_contents17hfe3c0a68c8ad1c74E
|
|
drop_contents
|
|
#
|
|
--format=rust
|
|
_ZN13drop_contents17h48cb59bef15bb555E
|
|
drop_contents
|
|
#
|
|
--format=rust
|
|
_ZN4core3mem7size_of17h900b33157bf58f26E
|
|
core::mem::size_of
|
|
#
|
|
--format=rust
|
|
_ZN67_$LT$alloc..raw_vec..RawVec$LT$T$GT$$u20$as$u20$core..ops..Drop$GT$4drop17h96a5cf6e94807905E
|
|
<alloc::raw_vec::RawVec<T> as core::ops::Drop>::drop
|
|
#
|
|
--format=rust
|
|
_ZN68_$LT$core..nonzero..NonZero$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17hc49056f882aa46dbE
|
|
<core::nonzero::NonZero<T> as core::ops::Deref>::deref
|
|
#
|
|
--format=rust
|
|
_ZN63_$LT$core..ptr..Unique$LT$T$GT$$u20$as$u20$core..ops..Deref$GT$5deref17h19f2ad4920655e85E
|
|
<core::ptr::Unique<T> as core::ops::Deref>::deref
|
|
#
|
|
--format=rust
|
|
_ZN11issue_609253foo37Foo$LT$issue_60925..llv$u6d$..Foo$GT$3foo17h059a991a004536adE
|
|
issue_60925::foo::Foo<issue_60925::llvm::Foo>::foo
|
|
--format=rust
|
|
_ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h000b1ad6c4f30bd6E
|
|
core::ops::function::FnOnce::call_once{{vtable.shim}}
|
|
#
|
|
############
|
|
#
|
|
# Coverage Tests (v0)
|
|
#
|
|
#
|
|
# Crate with a leading digit.
|
|
--format=rust
|
|
_RNvC6_123foo3bar
|
|
123foo::bar
|
|
# UTF-8 identifiers.
|
|
--format=rust
|
|
_RNqCs4fqI2P2rA04_11utf8_identsu30____7hkackfecea1cbdathfdh9hlq6y
|
|
utf8_idents::საჭმელად_გემრიელი_სადილი
|
|
# Closure path elements.
|
|
--format=rust
|
|
_RNCNCNgCs6DXkGYLi8lr_2cc5spawn00B5_
|
|
cc::spawn::{closure#0}::{closure#0}
|
|
#
|
|
--format=rust
|
|
_RNCINkXs25_NgCsbmNqQUJIY6D_4core5sliceINyB9_4IterhENuNgNoBb_4iter8iterator8Iterator9rpositionNCNgNpB9_6memchr7memrchrs_0E0Bb_
|
|
<core::slice::Iter<u8> as core::iter::iterator::Iterator>::rposition::<core::slice::memchr::memrchr::{closure#1}>::{closure#0}
|
|
# dyn Trait ("trait object") types.
|
|
--format=rust
|
|
_RINbNbCskIICzLVDPPb_5alloc5alloc8box_freeDINbNiB4_5boxed5FnBoxuEp6OutputuEL_ECs1iopQbuBiw2_3std
|
|
alloc::alloc::box_free::<dyn alloc::boxed::FnBox<(), Output = ()>>
|
|
# Types with const generics parameters.
|
|
--format=rust
|
|
_RNvMC0INtC8arrayvec8ArrayVechKj7b_E3new
|
|
<arrayvec::ArrayVec<u8, 123>>::new
|
|
#
|
|
--format=rust
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_8UnsignedKhb_E
|
|
<const_generic::Unsigned<11>>
|
|
#
|
|
--format=rust
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_6SignedKs98_E
|
|
<const_generic::Signed<152>>
|
|
#
|
|
--format=rust
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_6SignedKanb_E
|
|
<const_generic::Signed<-11>>
|
|
#
|
|
--format=rust
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4BoolKb0_E
|
|
<const_generic::Bool<false>>
|
|
#
|
|
--format=rust
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4BoolKb1_E
|
|
<const_generic::Bool<true>>
|
|
#
|
|
--format=rust
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc76_E
|
|
<const_generic::Char<'v'>>
|
|
#
|
|
--format=rust
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKca_E
|
|
<const_generic::Char<'\n'>>
|
|
#
|
|
--format=rust
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc2202_E
|
|
<const_generic::Char<'\u{2202}'>>
|
|
#
|
|
--format=rust
|
|
_RNvNvMCs4fqI2P2rA04_13const_genericINtB4_3FooKpE3foo3FOO
|
|
<const_generic::Foo<_>>::foo::FOO
|
|
#
|
|
# All of the tests above but in auto mode instead:
|
|
#
|
|
# Crate with a leading digit.
|
|
--format=auto
|
|
_RNvC6_123foo3bar
|
|
123foo::bar
|
|
# UTF-8 identifiers.
|
|
--format=auto
|
|
_RNqCs4fqI2P2rA04_11utf8_identsu30____7hkackfecea1cbdathfdh9hlq6y
|
|
utf8_idents::საჭმელად_გემრიელი_სადილი
|
|
# Closure path elements.
|
|
--format=auto
|
|
_RNCNCNgCs6DXkGYLi8lr_2cc5spawn00B5_
|
|
cc::spawn::{closure#0}::{closure#0}
|
|
#
|
|
--format=auto
|
|
_RNCINkXs25_NgCsbmNqQUJIY6D_4core5sliceINyB9_4IterhENuNgNoBb_4iter8iterator8Iterator9rpositionNCNgNpB9_6memchr7memrchrs_0E0Bb_
|
|
<core::slice::Iter<u8> as core::iter::iterator::Iterator>::rposition::<core::slice::memchr::memrchr::{closure#1}>::{closure#0}
|
|
# dyn Trait ("trait object") types.
|
|
--format=auto
|
|
_RINbNbCskIICzLVDPPb_5alloc5alloc8box_freeDINbNiB4_5boxed5FnBoxuEp6OutputuEL_ECs1iopQbuBiw2_3std
|
|
alloc::alloc::box_free::<dyn alloc::boxed::FnBox<(), Output = ()>>
|
|
# Types with const generics parameters.
|
|
--format=auto
|
|
_RNvMC0INtC8arrayvec8ArrayVechKj7b_E3new
|
|
<arrayvec::ArrayVec<u8, 123>>::new
|
|
#
|
|
--format=auto
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_8UnsignedKhb_E
|
|
<const_generic::Unsigned<11>>
|
|
#
|
|
--format=auto
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_6SignedKs98_E
|
|
<const_generic::Signed<152>>
|
|
#
|
|
--format=auto
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_6SignedKanb_E
|
|
<const_generic::Signed<-11>>
|
|
#
|
|
--format=auto
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4BoolKb0_E
|
|
<const_generic::Bool<false>>
|
|
#
|
|
--format=auto
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4BoolKb1_E
|
|
<const_generic::Bool<true>>
|
|
#
|
|
--format=auto
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc76_E
|
|
<const_generic::Char<'v'>>
|
|
#
|
|
--format=auto
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKca_E
|
|
<const_generic::Char<'\n'>>
|
|
#
|
|
--format=auto
|
|
_RMCs4fqI2P2rA04_13const_genericINtB0_4CharKc2202_E
|
|
<const_generic::Char<'\u{2202}'>>
|
|
#
|
|
--format=auto
|
|
_RNvNvMCs4fqI2P2rA04_13const_genericINtB4_3FooKpE3foo3FOO
|
|
<const_generic::Foo<_>>::foo::FOO
|
|
#
|
|
# Suffixes
|
|
#
|
|
--format=rust
|
|
_RNvMs0_NtCs5l0EXMQXRMU_21rustc_data_structures17obligation_forestINtB5_16ObligationForestNtNtNtCsdozMG8X9FIu_21rustc_trait_selection6traits7fulfill26PendingPredicateObligationE22register_obligation_atB1v_.llvm.8517020237817239694
|
|
<rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::register_obligation_at
|
|
--format=rust
|
|
_ZN4core3ptr85drop_in_place$LT$std..rt..lang_start$LT$$LP$$RP$$GT$..$u7b$$u7b$closure$u7d$$u7d$$GT$17h27f14859c664490dE.llvm.8091179795805947855
|
|
core::ptr::drop_in_place<std::rt::lang_start<()>::{{closure}}>
|
|
# old style rustc llvm thinlto
|
|
--format=rust
|
|
_ZN9backtrace3foo17hbb467fcdaea5d79bE.llvm.A5310EB9
|
|
backtrace::foo
|
|
--format=rust
|
|
_ZN9backtrace3foo17hbb467fcdaea5d79bE.llvm.A5310EB9@@16
|
|
backtrace::foo
|
|
# new style rustc llvm thinlto
|
|
--format=rust
|
|
_RC3foo.llvm.9D1C9369
|
|
foo
|
|
--format=rust
|
|
_RC3foo.llvm.9D1C9369@@16
|
|
foo
|
|
--format=rust
|
|
_RNvC9backtrace3foo.llvm.A5310EB9
|
|
backtrace::foo
|