From a3c25aec21595adf6b1e16f2209fafd39c8e7942 Mon Sep 17 00:00:00 2001 From: Chris Mihelich Date: Thu, 23 May 2024 11:21:54 -0700 Subject: Demangle C++ sZ encodings (sizeof...(pack)). PiperOrigin-RevId: 636615840 Change-Id: I34f584ea0c6603a0781e874d683b516de94c6928 --- absl/debugging/internal/demangle_test.cc | 20 ++++++++++++++++++++ 1 file changed, 20 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 9db79e64..0044d420 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -329,6 +329,26 @@ TEST(Demangle, SubobjectAddresses) { EXPECT_STREQ("f<>()", tmp); } +TEST(Demangle, SizeofPacks) { + char tmp[80]; + + // template struct S {}; + // + // template auto f(T... p) -> S { return {}; } + // template auto f(int, long) -> S<2>; + // + // template auto g(T... p) -> S { return {}; } + // template auto g(int, long) -> S<2>; + + // S f(int, long) + EXPECT_TRUE(Demangle("_Z1fIJilEE1SIXsZT_EEDpT_", tmp, sizeof(tmp))); + EXPECT_STREQ("f<>()", tmp); + + // S g(int, long) + EXPECT_TRUE(Demangle("_Z1gIJilEE1SIXsZfp_EEDpT_", tmp, sizeof(tmp))); + EXPECT_STREQ("g<>()", 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