diff options
author | Chris Mihelich <cmihelic@google.com> | 2024-05-29 05:05:20 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-05-29 05:06:18 -0700 |
commit | abc0f8d1096a66c087365327c217963eab15839c (patch) | |
tree | 4a7f5706035a4f4eba84dedbd354f21d29857d28 /absl/debugging/internal/demangle_test.cc | |
parent | 1f5a9cdc4354faccda4227235ea1acb77d9a4466 (diff) | |
download | abseil-abc0f8d1096a66c087365327c217963eab15839c.tar.gz abseil-abc0f8d1096a66c087365327c217963eab15839c.tar.bz2 abseil-abc0f8d1096a66c087365327c217963eab15839c.zip |
Demangle Clang's encoding of __attribute__((enable_if(condition, "message"))).
PiperOrigin-RevId: 638244694
Change-Id: I80393c6c00f1554057a915e0d71f88b7d899818c
Diffstat (limited to 'absl/debugging/internal/demangle_test.cc')
-rw-r--r-- | absl/debugging/internal/demangle_test.cc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc index 2c582415..998d34bb 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -461,6 +461,42 @@ TEST(Demangle, AbiTags) { EXPECT_STREQ("C[abi:bar][abi:foo]()", tmp); } +TEST(Demangle, EnableIfAttributeOnGlobalFunction) { + char tmp[80]; + + // int f(long l) __attribute__((enable_if(l >= 0, ""))) { return l; } + // + // f(long) [enable_if:fp >= 0] + EXPECT_TRUE(Demangle("_Z1fUa9enable_ifIXgefL0p_Li0EEEl", tmp, sizeof(tmp))); + EXPECT_STREQ("f()", tmp); +} + +TEST(Demangle, EnableIfAttributeOnNamespaceScopeFunction) { + char tmp[80]; + + // namespace ns { + // int f(long l) __attribute__((enable_if(l >= 0, ""))) { return l; } + // } // namespace ns + // + // ns::f(long) [enable_if:fp >= 0] + EXPECT_TRUE(Demangle("_ZN2ns1fEUa9enable_ifIXgefL0p_Li0EEEl", + tmp, sizeof(tmp))); + EXPECT_STREQ("ns::f()", tmp); +} + +TEST(Demangle, EnableIfAttributeOnFunctionTemplate) { + char tmp[80]; + + // template <class T> + // T f(T t) __attribute__((enable_if(t >= T{}, ""))) { return t; } + // template int f<int>(int); + // + // int f<int>(int) [enable_if:fp >= int{}] + EXPECT_TRUE(Demangle("_Z1fIiEUa9enable_ifIXgefL0p_tliEEET_S0_", + tmp, sizeof(tmp))); + EXPECT_STREQ("f<>()", tmp); +} + TEST(Demangle, ThisPointerInDependentSignature) { char tmp[80]; |