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/internal/demangle_test.cc | |
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/internal/demangle_test.cc')
-rw-r--r-- | absl/debugging/internal/demangle_test.cc | 22 |
1 files changed, 22 insertions, 0 deletions
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) { |