diff options
author | Chris Mihelich <cmihelic@google.com> | 2024-05-30 11:28:11 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-05-30 11:30:17 -0700 |
commit | c8671e7542ebfd928ee3e239315c8784fdd88e1c (patch) | |
tree | 65168844b779fc3c3a5fdee32231d299885a95d8 /absl/debugging/internal/demangle_test.cc | |
parent | 36c2a14c5966d06f4f8c3bd02e3ef9d517ead081 (diff) | |
download | abseil-c8671e7542ebfd928ee3e239315c8784fdd88e1c.tar.gz abseil-c8671e7542ebfd928ee3e239315c8784fdd88e1c.tar.bz2 abseil-c8671e7542ebfd928ee3e239315c8784fdd88e1c.zip |
Demangle lambdas in class member functions' default arguments.
PiperOrigin-RevId: 638723132
Change-Id: I26ef4dbcb1b965a9d8c2f6092ccb51cf3575ba22
Diffstat (limited to 'absl/debugging/internal/demangle_test.cc')
-rw-r--r-- | absl/debugging/internal/demangle_test.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc index 7705b0fd..58832e99 100644 --- a/absl/debugging/internal/demangle_test.cc +++ b/absl/debugging/internal/demangle_test.cc @@ -353,6 +353,34 @@ TEST(Demangle, LambdaWithExplicitPackArgument) { EXPECT_STREQ(tmp, "f<>()::{lambda()#1}::operator()<>()"); } +TEST(Demangle, LambdaInClassMemberDefaultArgument) { + char tmp[100]; + + // Source: + // + // struct S { + // static auto f(void (*g)() = [] {}) { return g; } + // }; + // void (*p)() = S::f(); + // + // Full LLVM demangling of the lambda call operator: + // + // S::f(void (*)())::'lambda'()::operator()() const + // + // Full GNU binutils demangling: + // + // S::f(void (*)())::{default arg#1}::{lambda()#1}::operator()() const + ASSERT_TRUE(Demangle("_ZZN1S1fEPFvvEEd_NKUlvE_clEv", tmp, sizeof(tmp))); + EXPECT_STREQ(tmp, "S::f()::{default arg#1}::{lambda()#1}::operator()()"); + + // The same but in the second rightmost default argument. + ASSERT_TRUE(Demangle("_ZZN1S1fEPFvvEEd0_NKUlvE_clEv", tmp, sizeof(tmp))); + EXPECT_STREQ(tmp, "S::f()::{default arg#2}::{lambda()#1}::operator()()"); + + // Reject negative <(parameter) number> values. + ASSERT_FALSE(Demangle("_ZZN1S1fEPFvvEEdn1_NKUlvE_clEv", tmp, sizeof(tmp))); +} + TEST(Demangle, SubstpackNotationForTroublesomeTemplatePack) { char tmp[100]; |