aboutsummaryrefslogtreecommitdiff
path: root/absl/debugging/internal/demangle_test.cc
diff options
context:
space:
mode:
authorChris Mihelich <cmihelic@google.com>2024-05-28 14:10:13 -0700
committerCopybara-Service <copybara-worker@google.com>2024-05-28 14:11:10 -0700
commit3ef92c6f375e71316c313a3f1a204c494cd3f762 (patch)
tree076ecdbd16bdad0e3a87947318763d97083e86d9 /absl/debugging/internal/demangle_test.cc
parent6ec17dc63626431c6d2b0403ad4c4b9ba1ceb7d3 (diff)
downloadabseil-3ef92c6f375e71316c313a3f1a204c494cd3f762.tar.gz
abseil-3ef92c6f375e71316c313a3f1a204c494cd3f762.tar.bz2
abseil-3ef92c6f375e71316c313a3f1a204c494cd3f762.zip
Demangle lambdas with explicit template arguments (UlTy and similar forms).
PiperOrigin-RevId: 638019038 Change-Id: I96a87e4736677df9d44520e4510e089a27372765
Diffstat (limited to 'absl/debugging/internal/demangle_test.cc')
-rw-r--r--absl/debugging/internal/demangle_test.cc42
1 files changed, 42 insertions, 0 deletions
diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc
index 0195e5a7..5fd50aff 100644
--- a/absl/debugging/internal/demangle_test.cc
+++ b/absl/debugging/internal/demangle_test.cc
@@ -303,6 +303,48 @@ TEST(Demangle, LambdaRequiresRequiresExpressionContainingTwoRequirements) {
EXPECT_STREQ(tmp, "$_0::operator()<>()");
}
+TEST(Demangle, LambdaWithExplicitTypeArgument) {
+ char tmp[100];
+
+ // Source:
+ //
+ // template <class T> T f(T t) {
+ // return []<class U>(U u) { return u + u; }(t);
+ // }
+ //
+ // template int f<int>(int);
+ //
+ // Full LLVM demangling of the lambda call operator:
+ //
+ // auto int f<int>(int)::'lambda'<typename $T>(int)::
+ // operator()<int>(int) const
+ ASSERT_TRUE(Demangle("_ZZ1fIiET_S0_ENKUlTyS0_E_clIiEEDaS0_",
+ tmp, sizeof(tmp)));
+ EXPECT_STREQ(tmp, "f<>()::{lambda()#1}::operator()<>()");
+}
+
+TEST(Demangle, LambdaWithExplicitPackArgument) {
+ char tmp[100];
+
+ // Source:
+ //
+ // template <class T> T h(T t) {
+ // return []<class... U>(U... u) {
+ // return ((u + u) + ... + 0);
+ // }(t);
+ // }
+ //
+ // template int h<int>(int);
+ //
+ // Full LLVM demangling of the lambda call operator:
+ //
+ // auto int f<int>(int)::'lambda'<typename ...$T>($T...)::
+ // operator()<int>($T...) const
+ ASSERT_TRUE(Demangle("_ZZ1fIiET_S0_ENKUlTpTyDpT_E_clIJiEEEDaS2_",
+ tmp, sizeof(tmp)));
+ EXPECT_STREQ(tmp, "f<>()::{lambda()#1}::operator()<>()");
+}
+
// Test corner cases of boundary conditions.
TEST(Demangle, CornerCases) {
char tmp[10];