aboutsummaryrefslogtreecommitdiff
path: root/absl/debugging/internal/demangle_rust_test.cc
diff options
context:
space:
mode:
authorChris Mihelich <cmihelic@google.com>2024-05-22 07:01:19 -0700
committerCopybara-Service <copybara-worker@google.com>2024-05-22 07:02:25 -0700
commitaaed9b4ab49047868285fe2fa0467e24790c4418 (patch)
treea0e3e519e8052f3f47f84022e5565d779be5913a /absl/debugging/internal/demangle_rust_test.cc
parente7f1a950e97b805d634909124fa4c75b690d0475 (diff)
downloadabseil-aaed9b4ab49047868285fe2fa0467e24790c4418.tar.gz
abseil-aaed9b4ab49047868285fe2fa0467e24790c4418.tar.bz2
abseil-aaed9b4ab49047868285fe2fa0467e24790c4418.zip
Recognize fn-type and lifetimes in Rust demangling.
PiperOrigin-RevId: 636152885 Change-Id: If545903854ea39cc4b5c51c88cd555072d27d89e
Diffstat (limited to 'absl/debugging/internal/demangle_rust_test.cc')
-rw-r--r--absl/debugging/internal/demangle_rust_test.cc56
1 files changed, 56 insertions, 0 deletions
diff --git a/absl/debugging/internal/demangle_rust_test.cc b/absl/debugging/internal/demangle_rust_test.cc
index 453d725b..34b78134 100644
--- a/absl/debugging/internal/demangle_rust_test.cc
+++ b/absl/debugging/internal/demangle_rust_test.cc
@@ -478,6 +478,62 @@ TEST(DemangleRust, TraitImplWithNonpathSelfType) {
"<&i32 as my_crate::my_trait>::my_func");
}
+TEST(DemangleRust, ThunkType) {
+ EXPECT_DEMANGLING("_RNvYFEuNtC1c1t1f", // <fn() as c::t>::f
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, NontrivialFunctionReturnType) {
+ EXPECT_DEMANGLING(
+ "_RNvYFERTlmENtC1c1t1f", // <fn() -> &(i32, u32) as c::t>::f
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, OneParameterType) {
+ EXPECT_DEMANGLING("_RNvYFlEuNtC1c1t1f", // <fn(i32) as c::t>::f
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, TwoParameterTypes) {
+ EXPECT_DEMANGLING("_RNvYFlmEuNtC1c1t1f", // <fn(i32, u32) as c::t>::f
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, ExternC) {
+ EXPECT_DEMANGLING("_RNvYFKCEuNtC1c1t1f", // <extern "C" fn() as c::t>>::f
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, ExternOther) {
+ EXPECT_DEMANGLING(
+ "_RNvYFK5not_CEuNtC1c1t1f", // <extern "not-C" fn() as c::t>::f
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, Unsafe) {
+ EXPECT_DEMANGLING("_RNvYFUEuNtC1c1t1f", // <unsafe fn() as c::t>::f
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, Binder) {
+ EXPECT_DEMANGLING(
+ // <for<'a> fn(&'a i32) -> &'a i32 as c::t>::f
+ "_RNvYFG_RL0_lEB5_NtC1c1t1f",
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, AllFnSigFeaturesInOrder) {
+ EXPECT_DEMANGLING(
+ // <for<'a> unsafe extern "C" fn(&'a i32) -> &'a i32 as c::t>::f
+ "_RNvYFG_UKCRL0_lEB8_NtC1c1t1f",
+ "<fn... as c::t>::f");
+}
+
+TEST(DemangleRust, LifetimeInGenericArgs) {
+ EXPECT_DEMANGLING("_RINvC1c1fINtB2_1sL_EE", // c::f::<c::s::<'_>>
+ "c::f::<>");
+}
+
} // namespace
} // namespace debugging_internal
ABSL_NAMESPACE_END