mirror of
https://github.com/intel/llvm.git
synced 2026-01-23 16:06:39 +08:00
[libcxxabi][Demangle] Don't drop ctor/dtor name for abi-tagged structures
Before this patch we would demangle abi-tagged structures as follows: ``` $ c++filt -n _ZN1SB5OuterC2Ev S[abi:Outer]:() $ c++filt -n _ZN1SB5OuterD2Ev S[abi:Outer]::~() ``` This is because `Node::getBaseName` was unimplemented for the `AbiTagAttr` node, which meant that when we tried printing `CtorDtorName` where its `Basename` `Node` was an `AbiTagAttr`, we'd drop the name. Addresses https://github.com/llvm/llvm-project/issues/61213 Differential Revision: https://reviews.llvm.org/D145492
This commit is contained in:
@@ -544,6 +544,8 @@ struct AbiTagAttr : Node {
|
||||
|
||||
template<typename Fn> void match(Fn F) const { F(Base, Tag); }
|
||||
|
||||
StringView getBaseName() const override { return Base->getBaseName(); }
|
||||
|
||||
void printLeft(OutputBuffer &OB) const override {
|
||||
Base->printLeft(OB);
|
||||
OB += "[abi:";
|
||||
|
||||
@@ -30112,6 +30112,8 @@ const char* cases[][2] =
|
||||
"::basic_ostream()"},
|
||||
{"_ZNSsC1Ev", "std::basic_string<char, std::char_traits<char>,"
|
||||
" std::allocator<char>>::basic_string()"},
|
||||
{"_ZN1SB8ctor_tagC2Ev", "S[abi:ctor_tag]::S()"},
|
||||
{"_ZN1SB8ctor_tagD2Ev", "S[abi:ctor_tag]::~S()"},
|
||||
};
|
||||
|
||||
const unsigned N = sizeof(cases) / sizeof(cases[0]);
|
||||
|
||||
@@ -537,6 +537,8 @@ struct AbiTagAttr : Node {
|
||||
|
||||
template<typename Fn> void match(Fn F) const { F(Base, Tag); }
|
||||
|
||||
StringView getBaseName() const override { return Base->getBaseName(); }
|
||||
|
||||
void printLeft(OutputBuffer &OB) const override {
|
||||
Base->printLeft(OB);
|
||||
OB += "[abi:";
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
RUN: llvm-cxxfilt -n _Z14returns_stringB5cxx11v _Z6globalB5cxx11 _Z6globalB12a_longer_tag | FileCheck %s
|
||||
RUN: llvm-cxxfilt -n _Z14returns_stringB5cxx11v _Z6globalB5cxx11 _Z6globalB12a_longer_tag _ZN6globalB3TagC2Ev _ZN6globalB3TagD2Ev | FileCheck %s
|
||||
|
||||
CHECK: returns_string[abi:cxx11]()
|
||||
CHECK-NEXT: global[abi:cxx11]
|
||||
CHECK-NEXT: global[abi:a_longer_tag]
|
||||
|
||||
CHECK-NEXT: global[abi:Tag]::global()
|
||||
CHECK-NEXT: global[abi:Tag]::~global()
|
||||
|
||||
Reference in New Issue
Block a user