aboutsummaryrefslogtreecommitdiff
path: root/absl/debugging/internal/demangle_test.cc
diff options
context:
space:
mode:
authorChris Mihelich <cmihelic@google.com>2024-05-23 08:54:46 -0700
committerCopybara-Service <copybara-worker@google.com>2024-05-23 08:55:58 -0700
commit88c1f181e2b60463b127ec554689f1450f6c142d (patch)
treebbb7b6e292d1d9a075d599b6a37604b7f594e8ac /absl/debugging/internal/demangle_test.cc
parent414929371ba51c475d0512e0354d911bf1d00598 (diff)
downloadabseil-88c1f181e2b60463b127ec554689f1450f6c142d.tar.gz
abseil-88c1f181e2b60463b127ec554689f1450f6c142d.tar.bz2
abseil-88c1f181e2b60463b127ec554689f1450f6c142d.zip
Demangle C++ so ... E encodings (typically array-to-pointer decay).
PiperOrigin-RevId: 636566755 Change-Id: I2c8c1f19a67a7a487dd2bbb46c17f9fb4e2b037c
Diffstat (limited to 'absl/debugging/internal/demangle_test.cc')
-rw-r--r--absl/debugging/internal/demangle_test.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc
index b6318302..9db79e64 100644
--- a/absl/debugging/internal/demangle_test.cc
+++ b/absl/debugging/internal/demangle_test.cc
@@ -300,6 +300,35 @@ TEST(Demangle, AbiTags) {
EXPECT_STREQ("C[abi:bar][abi:foo]()", tmp);
}
+// Test subobject-address template parameters.
+TEST(Demangle, SubobjectAddresses) {
+ char tmp[80];
+
+ // void f<a.<char const at offset 123>>()
+ EXPECT_TRUE(Demangle("_Z1fIXsoKcL_Z1aE123EEEvv", tmp, sizeof(tmp)));
+ EXPECT_STREQ("f<>()", tmp);
+
+ // void f<&a.<char const at offset 0>>()
+ EXPECT_TRUE(Demangle("_Z1fIXadsoKcL_Z1aEEEEvv", tmp, sizeof(tmp)));
+ EXPECT_STREQ("f<>()", tmp);
+
+ // void f<&a.<char const at offset 123>>()
+ EXPECT_TRUE(Demangle("_Z1fIXadsoKcL_Z1aE123EEEvv", tmp, sizeof(tmp)));
+ EXPECT_STREQ("f<>()", tmp);
+
+ // void f<&a.<char const at offset 123>>(), past the end this time
+ EXPECT_TRUE(Demangle("_Z1fIXadsoKcL_Z1aE123pEEEvv", tmp, sizeof(tmp)));
+ EXPECT_STREQ("f<>()", tmp);
+
+ // void f<&a.<char const at offset 0>>() with union-selectors
+ EXPECT_TRUE(Demangle("_Z1fIXadsoKcL_Z1aE__1_234EEEvv", tmp, sizeof(tmp)));
+ EXPECT_STREQ("f<>()", tmp);
+
+ // void f<&a.<char const at offset 123>>(), past the end, with union-selector
+ EXPECT_TRUE(Demangle("_Z1fIXadsoKcL_Z1aE123_456pEEEvv", tmp, sizeof(tmp)));
+ EXPECT_STREQ("f<>()", 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) {