From d8e17c009185a3bb305d774aa9e41f3c5de605f6 Mon Sep 17 00:00:00 2001 From: Chris Mihelich Date: Tue, 4 Jun 2024 14:28:23 -0700 Subject: Demangle types nested under vendor extended types. PiperOrigin-RevId: 640284003 Change-Id: I3ad2d971383513c7eeb5e3179e50c036cf7aa020 --- absl/debugging/internal/demangle_test.cc | 21 +++++++++++++++++++++ 1 file changed, 21 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 6010bd87..cb8b36d0 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -192,6 +192,27 @@ TEST(Demangle, FailsOnTwoArgTemplateBuiltinType) { Demangle("_Z3fooIicEu17__my_builtin_typeIT_T0_Ev", tmp, sizeof(tmp))); } +TEST(Demangle, TypeNestedUnderTemplatedBuiltinType) { + char tmp[100]; + + // Source: + // + // template + // typename std::remove_reference_t::type f(T t); + // + // struct C { using type = C; }; + // + // f(C{}); + // + // These days std::remove_reference_t is implemented in terms of a vendor + // builtin __remove_reference_t. A full demangling might look like: + // + // __remove_reference_t::type f(C const&) + ASSERT_TRUE(Demangle("_Z1fIRK1CENu20__remove_reference_tIT_E4typeES3_", + tmp, sizeof(tmp))); + EXPECT_STREQ("f<>()", tmp); +} + TEST(Demangle, TemplateTemplateParamSubstitution) { char tmp[100]; -- cgit v1.2.3