diff options
author | Chris Mihelich <cmihelic@google.com> | 2024-05-23 12:15:04 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-05-23 12:15:59 -0700 |
commit | cfac0a350617776cf461ba8b9f743378eb4ae355 (patch) | |
tree | 506238de411f8abdfba1ffcb52f6dab41969599c /absl/debugging | |
parent | a3c25aec21595adf6b1e16f2209fafd39c8e7942 (diff) | |
download | abseil-cfac0a350617776cf461ba8b9f743378eb4ae355.tar.gz abseil-cfac0a350617776cf461ba8b9f743378eb4ae355.tar.bz2 abseil-cfac0a350617776cf461ba8b9f743378eb4ae355.zip |
Demangle the C++ spaceship operator (ss, operator<=>).
PiperOrigin-RevId: 636634618
Change-Id: I812115d2a33dc71446a14deadc6af019eef6dfd7
Diffstat (limited to 'absl/debugging')
-rw-r--r-- | absl/debugging/internal/demangle.cc | 1 | ||||
-rw-r--r-- | absl/debugging/internal/demangle_test.cc | 22 |
2 files changed, 23 insertions, 0 deletions
diff --git a/absl/debugging/internal/demangle.cc b/absl/debugging/internal/demangle.cc index 1b9ca57b..ff89f8d8 100644 --- a/absl/debugging/internal/demangle.cc +++ b/absl/debugging/internal/demangle.cc @@ -81,6 +81,7 @@ static const AbbrevPair kOperatorList[] = { {"rs", ">>", 2}, {"lS", "<<=", 2}, {"rS", ">>=", 2}, + {"ss", "<=>", 2}, {"eq", "==", 2}, {"ne", "!=", 2}, {"lt", "<", 2}, diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc index 0044d420..45fba703 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -349,6 +349,28 @@ TEST(Demangle, SizeofPacks) { EXPECT_STREQ("g<>()", tmp); } +TEST(Demangle, Spaceship) { + char tmp[80]; + + // #include <compare> + // + // struct S { auto operator<=>(const S&) const = default; }; + // auto (S::*f) = &S::operator<=>; // make sure S::operator<=> is emitted + // + // template <class T> auto g(T x, T y) -> decltype(x <=> y) { + // return x <=> y; + // } + // template auto g<S>(S x, S y) -> decltype(x <=> y); + + // S::operator<=>(S const&) const + EXPECT_TRUE(Demangle("_ZNK1SssERKS_", tmp, sizeof(tmp))); + EXPECT_STREQ("S::operator<=>()", tmp); + + // decltype(fp <=> fp0) g<S>(S, S) + EXPECT_TRUE(Demangle("_Z1gI1SEDTssfp_fp0_ET_S2_", 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) { |