[libcxx-commits] [libcxxabi] [llvm] [ItaniumDemangle] Remove Named flag from OperatorInfo::Member entries (PR #136862)
Michael Buch via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Apr 25 01:33:30 PDT 2025
https://github.com/Michael137 updated https://github.com/llvm/llvm-project/pull/136862
>From e54c1cdd83bc0d8772d121b57006b6df18d80483 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Wed, 23 Apr 2025 14:17:45 +0100
Subject: [PATCH 1/3] [ItaniumDemangle] Remove Named flag from
OperatorInfo::Member entries
---
libcxxabi/src/demangle/ItaniumDemangle.h | 11 ++++-------
libcxxabi/test/test_demangle.pass.cpp | 4 ++++
llvm/include/llvm/Demangle/ItaniumDemangle.h | 11 ++++-------
3 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h
index 69932e63669bf..67cc4560f061d 100644
--- a/libcxxabi/src/demangle/ItaniumDemangle.h
+++ b/libcxxabi/src/demangle/ItaniumDemangle.h
@@ -3389,9 +3389,9 @@ const typename AbstractManglingParser<
{"de", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator*"},
{"dl", OperatorInfo::Del, /*Ary*/ false, Node::Prec::Unary,
"operator delete"},
- {"ds", OperatorInfo::Member, /*Named*/ false, Node::Prec::PtrMem,
+ {"ds", OperatorInfo::Member, false, Node::Prec::PtrMem,
"operator.*"},
- {"dt", OperatorInfo::Member, /*Named*/ false, Node::Prec::Postfix,
+ {"dt", OperatorInfo::Member, false, Node::Prec::Postfix,
"operator."},
{"dv", OperatorInfo::Binary, false, Node::Prec::Assign, "operator/"},
{"eO", OperatorInfo::Binary, false, Node::Prec::Assign, "operator^="},
@@ -3421,11 +3421,11 @@ const typename AbstractManglingParser<
{"or", OperatorInfo::Binary, false, Node::Prec::Ior, "operator|"},
{"pL", OperatorInfo::Binary, false, Node::Prec::Assign, "operator+="},
{"pl", OperatorInfo::Binary, false, Node::Prec::Additive, "operator+"},
- {"pm", OperatorInfo::Member, /*Named*/ false, Node::Prec::PtrMem,
+ {"pm", OperatorInfo::Member, false, Node::Prec::PtrMem,
"operator->*"},
{"pp", OperatorInfo::Postfix, false, Node::Prec::Postfix, "operator++"},
{"ps", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator+"},
- {"pt", OperatorInfo::Member, /*Named*/ true, Node::Prec::Postfix,
+ {"pt", OperatorInfo::Member, false, Node::Prec::Postfix,
"operator->"},
{"qu", OperatorInfo::Conditional, false, Node::Prec::Conditional,
"operator?"},
@@ -3499,9 +3499,6 @@ AbstractManglingParser<Derived, Alloc>::parseOperatorName(NameState *State) {
if (Op->getKind() >= OperatorInfo::Unnameable)
/* Not a nameable operator. */
return nullptr;
- if (Op->getKind() == OperatorInfo::Member && !Op->getFlag())
- /* Not a nameable MemberExpr */
- return nullptr;
return make<NameType>(Op->getName());
}
diff --git a/libcxxabi/test/test_demangle.pass.cpp b/libcxxabi/test/test_demangle.pass.cpp
index 53da1bf6765e7..22b39fb06458d 100644
--- a/libcxxabi/test/test_demangle.pass.cpp
+++ b/libcxxabi/test/test_demangle.pass.cpp
@@ -30246,6 +30246,10 @@ const char* cases[][2] = {
{"_Z3fooPU9__ptrauthILj3ELb1ELj234EEPi", "foo(int* __ptrauth<3u, true, 234u>*)"},
{"_Z3fooIPU9__ptrauthILj1ELb0ELj64EEPiEvT_", "void foo<int* __ptrauth<1u, false, 64u>*>(int* __ptrauth<1u, false, 64u>*)"},
+
+ {"_ZN1CpmEi", "C::operator->*(int)"},
+ {"_ZN1CdtEi", "C::operator.(int)"},
+ {"_ZN1CdsEi", "C::operator.*(int)"},
// clang-format on
};
diff --git a/llvm/include/llvm/Demangle/ItaniumDemangle.h b/llvm/include/llvm/Demangle/ItaniumDemangle.h
index b4a4c72021fd1..f75e309b06e0a 100644
--- a/llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ b/llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -3389,9 +3389,9 @@ const typename AbstractManglingParser<
{"de", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator*"},
{"dl", OperatorInfo::Del, /*Ary*/ false, Node::Prec::Unary,
"operator delete"},
- {"ds", OperatorInfo::Member, /*Named*/ false, Node::Prec::PtrMem,
+ {"ds", OperatorInfo::Member, false, Node::Prec::PtrMem,
"operator.*"},
- {"dt", OperatorInfo::Member, /*Named*/ false, Node::Prec::Postfix,
+ {"dt", OperatorInfo::Member, false, Node::Prec::Postfix,
"operator."},
{"dv", OperatorInfo::Binary, false, Node::Prec::Assign, "operator/"},
{"eO", OperatorInfo::Binary, false, Node::Prec::Assign, "operator^="},
@@ -3421,11 +3421,11 @@ const typename AbstractManglingParser<
{"or", OperatorInfo::Binary, false, Node::Prec::Ior, "operator|"},
{"pL", OperatorInfo::Binary, false, Node::Prec::Assign, "operator+="},
{"pl", OperatorInfo::Binary, false, Node::Prec::Additive, "operator+"},
- {"pm", OperatorInfo::Member, /*Named*/ false, Node::Prec::PtrMem,
+ {"pm", OperatorInfo::Member, false, Node::Prec::PtrMem,
"operator->*"},
{"pp", OperatorInfo::Postfix, false, Node::Prec::Postfix, "operator++"},
{"ps", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator+"},
- {"pt", OperatorInfo::Member, /*Named*/ true, Node::Prec::Postfix,
+ {"pt", OperatorInfo::Member, false, Node::Prec::Postfix,
"operator->"},
{"qu", OperatorInfo::Conditional, false, Node::Prec::Conditional,
"operator?"},
@@ -3499,9 +3499,6 @@ AbstractManglingParser<Derived, Alloc>::parseOperatorName(NameState *State) {
if (Op->getKind() >= OperatorInfo::Unnameable)
/* Not a nameable operator. */
return nullptr;
- if (Op->getKind() == OperatorInfo::Member && !Op->getFlag())
- /* Not a nameable MemberExpr */
- return nullptr;
return make<NameType>(Op->getName());
}
>From 36e52b1eadabd6a5eae9b6efd7545422b33d2b37 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Wed, 23 Apr 2025 15:04:20 +0100
Subject: [PATCH 2/3] fixup! clang-format
---
libcxxabi/src/demangle/ItaniumDemangle.h | 12 ++++--------
llvm/include/llvm/Demangle/ItaniumDemangle.h | 12 ++++--------
2 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h
index 67cc4560f061d..d8d79cd9c082e 100644
--- a/libcxxabi/src/demangle/ItaniumDemangle.h
+++ b/libcxxabi/src/demangle/ItaniumDemangle.h
@@ -3389,10 +3389,8 @@ const typename AbstractManglingParser<
{"de", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator*"},
{"dl", OperatorInfo::Del, /*Ary*/ false, Node::Prec::Unary,
"operator delete"},
- {"ds", OperatorInfo::Member, false, Node::Prec::PtrMem,
- "operator.*"},
- {"dt", OperatorInfo::Member, false, Node::Prec::Postfix,
- "operator."},
+ {"ds", OperatorInfo::Member, false, Node::Prec::PtrMem, "operator.*"},
+ {"dt", OperatorInfo::Member, false, Node::Prec::Postfix, "operator."},
{"dv", OperatorInfo::Binary, false, Node::Prec::Assign, "operator/"},
{"eO", OperatorInfo::Binary, false, Node::Prec::Assign, "operator^="},
{"eo", OperatorInfo::Binary, false, Node::Prec::Xor, "operator^"},
@@ -3421,12 +3419,10 @@ const typename AbstractManglingParser<
{"or", OperatorInfo::Binary, false, Node::Prec::Ior, "operator|"},
{"pL", OperatorInfo::Binary, false, Node::Prec::Assign, "operator+="},
{"pl", OperatorInfo::Binary, false, Node::Prec::Additive, "operator+"},
- {"pm", OperatorInfo::Member, false, Node::Prec::PtrMem,
- "operator->*"},
+ {"pm", OperatorInfo::Member, false, Node::Prec::PtrMem, "operator->*"},
{"pp", OperatorInfo::Postfix, false, Node::Prec::Postfix, "operator++"},
{"ps", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator+"},
- {"pt", OperatorInfo::Member, false, Node::Prec::Postfix,
- "operator->"},
+ {"pt", OperatorInfo::Member, false, Node::Prec::Postfix, "operator->"},
{"qu", OperatorInfo::Conditional, false, Node::Prec::Conditional,
"operator?"},
{"rM", OperatorInfo::Binary, false, Node::Prec::Assign, "operator%="},
diff --git a/llvm/include/llvm/Demangle/ItaniumDemangle.h b/llvm/include/llvm/Demangle/ItaniumDemangle.h
index f75e309b06e0a..51f697b539ada 100644
--- a/llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ b/llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -3389,10 +3389,8 @@ const typename AbstractManglingParser<
{"de", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator*"},
{"dl", OperatorInfo::Del, /*Ary*/ false, Node::Prec::Unary,
"operator delete"},
- {"ds", OperatorInfo::Member, false, Node::Prec::PtrMem,
- "operator.*"},
- {"dt", OperatorInfo::Member, false, Node::Prec::Postfix,
- "operator."},
+ {"ds", OperatorInfo::Member, false, Node::Prec::PtrMem, "operator.*"},
+ {"dt", OperatorInfo::Member, false, Node::Prec::Postfix, "operator."},
{"dv", OperatorInfo::Binary, false, Node::Prec::Assign, "operator/"},
{"eO", OperatorInfo::Binary, false, Node::Prec::Assign, "operator^="},
{"eo", OperatorInfo::Binary, false, Node::Prec::Xor, "operator^"},
@@ -3421,12 +3419,10 @@ const typename AbstractManglingParser<
{"or", OperatorInfo::Binary, false, Node::Prec::Ior, "operator|"},
{"pL", OperatorInfo::Binary, false, Node::Prec::Assign, "operator+="},
{"pl", OperatorInfo::Binary, false, Node::Prec::Additive, "operator+"},
- {"pm", OperatorInfo::Member, false, Node::Prec::PtrMem,
- "operator->*"},
+ {"pm", OperatorInfo::Member, false, Node::Prec::PtrMem, "operator->*"},
{"pp", OperatorInfo::Postfix, false, Node::Prec::Postfix, "operator++"},
{"ps", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator+"},
- {"pt", OperatorInfo::Member, false, Node::Prec::Postfix,
- "operator->"},
+ {"pt", OperatorInfo::Member, false, Node::Prec::Postfix, "operator->"},
{"qu", OperatorInfo::Conditional, false, Node::Prec::Conditional,
"operator?"},
{"rM", OperatorInfo::Binary, false, Node::Prec::Assign, "operator%="},
>From c545ebd60097f92a426984a1870cb5e24fafaafd Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Fri, 25 Apr 2025 09:01:41 +0100
Subject: [PATCH 3/3] fixup! restore condition; mark "pm" as Named
---
libcxxabi/src/demangle/ItaniumDemangle.h | 15 +++++++++++----
libcxxabi/test/test_demangle.pass.cpp | 4 ++--
llvm/include/llvm/Demangle/ItaniumDemangle.h | 15 +++++++++++----
3 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h
index d8d79cd9c082e..b8c7f9ecc8e06 100644
--- a/libcxxabi/src/demangle/ItaniumDemangle.h
+++ b/libcxxabi/src/demangle/ItaniumDemangle.h
@@ -3389,8 +3389,10 @@ const typename AbstractManglingParser<
{"de", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator*"},
{"dl", OperatorInfo::Del, /*Ary*/ false, Node::Prec::Unary,
"operator delete"},
- {"ds", OperatorInfo::Member, false, Node::Prec::PtrMem, "operator.*"},
- {"dt", OperatorInfo::Member, false, Node::Prec::Postfix, "operator."},
+ {"ds", OperatorInfo::Member, /*Named*/ false, Node::Prec::PtrMem,
+ "operator.*"},
+ {"dt", OperatorInfo::Member, /*Named*/ false, Node::Prec::Postfix,
+ "operator."},
{"dv", OperatorInfo::Binary, false, Node::Prec::Assign, "operator/"},
{"eO", OperatorInfo::Binary, false, Node::Prec::Assign, "operator^="},
{"eo", OperatorInfo::Binary, false, Node::Prec::Xor, "operator^"},
@@ -3419,10 +3421,12 @@ const typename AbstractManglingParser<
{"or", OperatorInfo::Binary, false, Node::Prec::Ior, "operator|"},
{"pL", OperatorInfo::Binary, false, Node::Prec::Assign, "operator+="},
{"pl", OperatorInfo::Binary, false, Node::Prec::Additive, "operator+"},
- {"pm", OperatorInfo::Member, false, Node::Prec::PtrMem, "operator->*"},
+ {"pm", OperatorInfo::Member, /*Named*/ true, Node::Prec::PtrMem,
+ "operator->*"},
{"pp", OperatorInfo::Postfix, false, Node::Prec::Postfix, "operator++"},
{"ps", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator+"},
- {"pt", OperatorInfo::Member, false, Node::Prec::Postfix, "operator->"},
+ {"pt", OperatorInfo::Member, /*Named*/ true, Node::Prec::Postfix,
+ "operator->"},
{"qu", OperatorInfo::Conditional, false, Node::Prec::Conditional,
"operator?"},
{"rM", OperatorInfo::Binary, false, Node::Prec::Assign, "operator%="},
@@ -3495,6 +3499,9 @@ AbstractManglingParser<Derived, Alloc>::parseOperatorName(NameState *State) {
if (Op->getKind() >= OperatorInfo::Unnameable)
/* Not a nameable operator. */
return nullptr;
+ if (Op->getKind() == OperatorInfo::Member && !Op->getFlag())
+ /* Not a nameable MemberExpr */
+ return nullptr;
return make<NameType>(Op->getName());
}
diff --git a/libcxxabi/test/test_demangle.pass.cpp b/libcxxabi/test/test_demangle.pass.cpp
index 22b39fb06458d..ece3130a71a8d 100644
--- a/libcxxabi/test/test_demangle.pass.cpp
+++ b/libcxxabi/test/test_demangle.pass.cpp
@@ -30248,8 +30248,6 @@ const char* cases[][2] = {
{"_Z3fooIPU9__ptrauthILj1ELb0ELj64EEPiEvT_", "void foo<int* __ptrauth<1u, false, 64u>*>(int* __ptrauth<1u, false, 64u>*)"},
{"_ZN1CpmEi", "C::operator->*(int)"},
- {"_ZN1CdtEi", "C::operator.(int)"},
- {"_ZN1CdsEi", "C::operator.*(int)"},
// clang-format on
};
@@ -30353,6 +30351,8 @@ const char *invalid_cases[] = {
"_ZGI3Foo",
"_ZGIW3Foov",
"W1x",
+ "_ZN1CdtEi",
+ "_ZN1CdsEi",
// clang-format on
};
diff --git a/llvm/include/llvm/Demangle/ItaniumDemangle.h b/llvm/include/llvm/Demangle/ItaniumDemangle.h
index 51f697b539ada..7bc0c01403b9f 100644
--- a/llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ b/llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -3389,8 +3389,10 @@ const typename AbstractManglingParser<
{"de", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator*"},
{"dl", OperatorInfo::Del, /*Ary*/ false, Node::Prec::Unary,
"operator delete"},
- {"ds", OperatorInfo::Member, false, Node::Prec::PtrMem, "operator.*"},
- {"dt", OperatorInfo::Member, false, Node::Prec::Postfix, "operator."},
+ {"ds", OperatorInfo::Member, /*Named*/ false, Node::Prec::PtrMem,
+ "operator.*"},
+ {"dt", OperatorInfo::Member, /*Named*/ false, Node::Prec::Postfix,
+ "operator."},
{"dv", OperatorInfo::Binary, false, Node::Prec::Assign, "operator/"},
{"eO", OperatorInfo::Binary, false, Node::Prec::Assign, "operator^="},
{"eo", OperatorInfo::Binary, false, Node::Prec::Xor, "operator^"},
@@ -3419,10 +3421,12 @@ const typename AbstractManglingParser<
{"or", OperatorInfo::Binary, false, Node::Prec::Ior, "operator|"},
{"pL", OperatorInfo::Binary, false, Node::Prec::Assign, "operator+="},
{"pl", OperatorInfo::Binary, false, Node::Prec::Additive, "operator+"},
- {"pm", OperatorInfo::Member, false, Node::Prec::PtrMem, "operator->*"},
+ {"pm", OperatorInfo::Member, /*Named*/ true, Node::Prec::PtrMem,
+ "operator->*"},
{"pp", OperatorInfo::Postfix, false, Node::Prec::Postfix, "operator++"},
{"ps", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator+"},
- {"pt", OperatorInfo::Member, false, Node::Prec::Postfix, "operator->"},
+ {"pt", OperatorInfo::Member, /*Named*/ true, Node::Prec::Postfix,
+ "operator->"},
{"qu", OperatorInfo::Conditional, false, Node::Prec::Conditional,
"operator?"},
{"rM", OperatorInfo::Binary, false, Node::Prec::Assign, "operator%="},
@@ -3495,6 +3499,9 @@ AbstractManglingParser<Derived, Alloc>::parseOperatorName(NameState *State) {
if (Op->getKind() >= OperatorInfo::Unnameable)
/* Not a nameable operator. */
return nullptr;
+ if (Op->getKind() == OperatorInfo::Member && !Op->getFlag())
+ /* Not a nameable MemberExpr */
+ return nullptr;
return make<NameType>(Op->getName());
}
More information about the libcxx-commits
mailing list