From c6000317f1cef3069315de81f918e1ac556e2ace Mon Sep 17 00:00:00 2001 From: Chris Mihelich Date: Fri, 7 Jun 2024 11:34:21 -0700 Subject: Demangle in types, e.g., U5AS128 for address_space(128). PiperOrigin-RevId: 641310017 Change-Id: I0f10a2a1965e842db4efda455e0cdfbeb6656fa5 --- absl/debugging/internal/demangle_test.cc | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 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 3285f2ca..9100d5f1 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -760,6 +760,40 @@ TEST(Demangle, GnuVectorSizeIsADependentOperatorExpression) { EXPECT_STREQ("f<>()", tmp); } +TEST(Demangle, SimpleAddressSpace) { + char tmp[80]; + + // Source: + // + // void f(const int __attribute__((address_space(128)))*) {} + // + // LLVM demangling: + // + // f(int const AS128*) + // + // Itanium ABI 5.1.5.1, "Qualified types", notes that address_space is mangled + // nonuniformly as a legacy exception: the number is part of the source-name + // if nondependent but is an expression in template-args if dependent. Thus + // it is a convenient test case for both forms. + EXPECT_TRUE(Demangle("_Z1fPU5AS128Ki", tmp, sizeof(tmp))); + EXPECT_STREQ("f()", tmp); +} + +TEST(Demangle, DependentAddressSpace) { + char tmp[80]; + + // Source: + // + // template void f (const int __attribute__((address_space(n)))*) {} + // template void f<128>(const int __attribute__((address_space(128)))*); + // + // LLVM demangling: + // + // void f<128>(int AS<128>*) + EXPECT_TRUE(Demangle("_Z1fILi128EEvPU2ASIT_Ei", tmp, sizeof(tmp))); + EXPECT_STREQ("f<>()", tmp); +} + TEST(Demangle, TransactionSafeEntryPoint) { char tmp[80]; -- cgit v1.2.3