[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 02:16:10 PDT 2021


aorlov created this revision.
aorlov added reviewers: rsmith, jyknight.
aorlov added a project: LLVM.
Herald added a reviewer: jhenderson.
aorlov requested review of this revision.
Herald added a subscriber: llvm-commits.

This fixes https://bugs.llvm.org/show_bug.cgi?id=48009 bug.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D98687

Files:
  llvm/include/llvm/Demangle/ItaniumDemangle.h
  llvm/test/tools/llvm-cxxfilt/ext-int.test


Index: llvm/test/tools/llvm-cxxfilt/ext-int.test 
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-cxxfilt/ext-int.test 
@@ -0,0 +1,4 @@
+## Test vendor extended type qualifier with optional template args.
+RUN: llvm-cxxfilt _Z29__spirv_ArbitraryFloatEQINTELILi79ELi79EEbU7_ExtIntIXT_EEiiU7_ExtIntIXT0_EEii | FileCheck %s
+
+CHECK: bool __spirv_ArbitraryFloatEQINTEL<79, 79>(int _ExtInt<79>, int, int _ExtInt<79>, int)
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.330903.patch
Type: text/x-patch
Size: 2202 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210316/7ee3fde9/attachment.bin>


More information about the llvm-commits mailing list