[PATCH] D98687: Fix demangling of optional template-args for vendor extended type qualifier.
Alex Orlov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 16 12:03:36 PDT 2021
aorlov updated this revision to Diff 331058.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D98687/new/
https://reviews.llvm.org/D98687
Files:
llvm/include/llvm/Demangle/ItaniumDemangle.h
llvm/unittests/Demangle/DemangleTest.cpp
Index: llvm/unittests/Demangle/DemangleTest.cpp
===================================================================
--- llvm/unittests/Demangle/DemangleTest.cpp
+++ llvm/unittests/Demangle/DemangleTest.cpp
@@ -21,4 +21,9 @@
"invocation function for block in foo(int)");
EXPECT_EQ(demangle("?foo@@YAXH at Z"), "void __cdecl foo(int)");
EXPECT_EQ(demangle("foo"), "foo");
+
+ // Regression test for demangling of optional template-args for vendor
+ // extended type qualifier (https://bugs.llvm.org/show_bug.cgi?id=48009)
+ EXPECT_EQ(demangle("_Z3fooILi79EEbU7_ExtIntIXT_EEi"),
+ "bool foo<79>(int _ExtInt<79>)");
}
Index: llvm/include/llvm/Demangle/ItaniumDemangle.h
===================================================================
--- llvm/include/llvm/Demangle/ItaniumDemangle.h
+++ llvm/include/llvm/Demangle/ItaniumDemangle.h
@@ -280,17 +280,20 @@
class VendorExtQualType final : public Node {
const Node *Ty;
StringView Ext;
+ const Node *TA;
public:
- VendorExtQualType(const Node *Ty_, StringView Ext_)
- : Node(KVendorExtQualType), Ty(Ty_), Ext(Ext_) {}
+ VendorExtQualType(const Node *Ty_, StringView Ext_, const Node *TA_)
+ : Node(KVendorExtQualType), Ty(Ty_), Ext(Ext_), TA(TA_) {}
- template<typename Fn> void match(Fn F) const { F(Ty, Ext); }
+ template<typename Fn> void match(Fn F) const { F(Ty, Ext, TA); }
void printLeft(OutputStream &S) const override {
Ty->print(S);
S += " ";
S += Ext;
+ if (TA != nullptr)
+ TA->print(S);
}
};
@@ -3680,8 +3683,6 @@
if (Qual.empty())
return nullptr;
- // FIXME parse the optional <template-args> here!
-
// extension ::= U <objc-name> <objc-type> # objc-type<identifier>
if (Qual.startsWith("objcproto")) {
StringView ProtoSourceName = Qual.dropFront(std::strlen("objcproto"));
@@ -3699,10 +3700,17 @@
return make<ObjCProtoName>(Child, Proto);
}
+ Node *TA = nullptr;
+ if (look() == 'I') {
+ TA = getDerived().parseTemplateArgs();
+ if (TA == nullptr)
+ return nullptr;
+ }
+
Node *Child = getDerived().parseQualifiedType();
if (Child == nullptr)
return nullptr;
- return make<VendorExtQualType>(Child, Qual);
+ return make<VendorExtQualType>(Child, Qual, TA);
}
Qualifiers Quals = parseCVQualifiers();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D98687.331058.patch
Type: text/x-patch
Size: 2370 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210316/e78a1c97/attachment.bin>
More information about the llvm-commits
mailing list