aboutsummaryrefslogtreecommitdiff
path: root/absl/debugging
diff options
context:
space:
mode:
authorChris Mihelich <cmihelic@google.com>2024-05-28 09:57:42 -0700
committerCopybara-Service <copybara-worker@google.com>2024-05-28 09:58:28 -0700
commit90d49cbad8c503418a10056e2d50c93caa0d142b (patch)
tree6c57a415cea99f2505397546042c28478950a589 /absl/debugging
parentca81d343946a1775860791f77cde565b43f92cdd (diff)
downloadabseil-90d49cbad8c503418a10056e2d50c93caa0d142b.tar.gz
abseil-90d49cbad8c503418a10056e2d50c93caa0d142b.tar.bz2
abseil-90d49cbad8c503418a10056e2d50c93caa0d142b.zip
Correctly demangle the <unresolved-name> at the end of dt and pt (x.y, x->y).
PiperOrigin-RevId: 637934582 Change-Id: Ie89b4317b11adba058dd999800e514eff49d4d69
Diffstat (limited to 'absl/debugging')
-rw-r--r--absl/debugging/internal/demangle.cc4
-rw-r--r--absl/debugging/internal/demangle_test.cc8
2 files changed, 11 insertions, 1 deletions
diff --git a/absl/debugging/internal/demangle.cc b/absl/debugging/internal/demangle.cc
index cfcd64b6..c27cc01a 100644
--- a/absl/debugging/internal/demangle.cc
+++ b/absl/debugging/internal/demangle.cc
@@ -1956,8 +1956,10 @@ static bool ParseExpression(State *state) {
state->parse_state = copy;
// Object and pointer member access expressions.
+ //
+ // <expression> ::= (dt | pt) <expression> <unresolved-name>
if ((ParseTwoCharToken(state, "dt") || ParseTwoCharToken(state, "pt")) &&
- ParseExpression(state) && ParseType(state)) {
+ ParseExpression(state) && ParseUnresolvedName(state)) {
return true;
}
state->parse_state = copy;
diff --git a/absl/debugging/internal/demangle_test.cc b/absl/debugging/internal/demangle_test.cc
index 23556a86..96074237 100644
--- a/absl/debugging/internal/demangle_test.cc
+++ b/absl/debugging/internal/demangle_test.cc
@@ -407,6 +407,14 @@ TEST(Demangle, ThisPointerInDependentSignature) {
EXPECT_STREQ("S::f<>()", tmp);
}
+TEST(Demangle, DependentMemberOperatorCall) {
+ char tmp[80];
+
+ // decltype(fp.operator()()) f<C>(C)
+ EXPECT_TRUE(Demangle("_Z1fI1CEDTcldtfp_onclEET_", tmp, sizeof(tmp)));
+ EXPECT_STREQ("f<>()", tmp);
+}
+
// Test subobject-address template parameters.
TEST(Demangle, SubobjectAddresses) {
char tmp[80];