From 2f61aed18c4affd3a75a2b2d2468d23f2f16192a Mon Sep 17 00:00:00 2001 From: Chris Mihelich Date: Fri, 7 Jun 2024 19:20:24 -0700 Subject: Demangle sr St , a dubious encoding found in the wild. PiperOrigin-RevId: 641418373 Change-Id: I2999228cccfd18a000725b938a692c0c9004867c --- absl/debugging/internal/demangle_test.cc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'absl/debugging/internal/demangle_test.cc') diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc index 1b305f74..68a759c1 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -1845,6 +1845,35 @@ TEST(Demangle, ThreadLocalWrappers) { EXPECT_STREQ("thread-local initialization routine for ns::var", tmp); } +TEST(Demangle, DubiousSrStSymbols) { + char tmp[80]; + + // GNU demangling (not accepted by LLVM): + // + // S::v> f() + EXPECT_TRUE(Demangle("_Z1fIcE1SIXsrSt1uIT_E1vEEv", tmp, sizeof(tmp))); + EXPECT_STREQ("f<>()", tmp); + + // A real case from the wild. + // + // GNU demangling (not accepted by LLVM) with line breaks and indentation + // added for readability: + // + // __gnu_cxx::__enable_if::__value, bool>::__type + // std::operator==( + // std::__cxx11::basic_string, + // std::allocator > const&, + // std::__cxx11::basic_string, + // std::allocator > const&) + EXPECT_TRUE(Demangle( + "_ZSteqIcEN9__gnu_cxx11__enable_if" + "IXsrSt9__is_charIT_E7__valueEbE" + "6__typeE" + "RKNSt7__cxx1112basic_stringIS3_St11char_traitsIS3_ESaIS3_EEESE_", + tmp, sizeof(tmp))); + EXPECT_STREQ("std::operator==<>()", tmp); +} + // Test one Rust symbol to exercise Demangle's delegation path. Rust demangling // itself is more thoroughly tested in demangle_rust_test.cc. TEST(Demangle, DelegatesToDemangleRustSymbolEncoding) { -- cgit v1.2.3