[PATCH] D102614: [index] Add support for type of pointers to class members

Ella Ma via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon May 24 22:29:54 PDT 2021


OikawaKirie updated this revision to Diff 347581.
OikawaKirie added a comment.

Update the test case to avoid a crash in the Windows version of the `c-index-test` tool.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D102614/new/

https://reviews.llvm.org/D102614

Files:
  clang/lib/Index/USRGeneration.cpp
  clang/test/Index/USR/MemberFunctionPtr.cpp


Index: clang/test/Index/USR/MemberFunctionPtr.cpp
===================================================================
--- /dev/null
+++ clang/test/Index/USR/MemberFunctionPtr.cpp
@@ -0,0 +1,33 @@
+// RUN: c-index-test -index-file %s | FileCheck %s
+
+struct C {
+  int X;
+  void f(char);
+};
+
+void f(int C::*) {}
+// CHECK: name: f | USR: c:@F at f#$@S at C::*I#
+void f(void (C::*)(char)) {}
+// CHECK: name: f | USR: c:@F at f#$@S at C::*Fv(#C)#
+
+typedef int C::*Xtd;
+void ftd(Xtd) {}
+// CHECK: name: ftd | USR: c:@F at ftd#$@S at C::*I#
+typedef void (C::*Ftd)(char);
+void ftd(Ftd) {}
+// CHECK: name: ftd | USR: c:@F at ftd#$@S at C::*Fv(#C)#
+
+using Xus = int C::*;
+void fus(Xus) {}
+// CHECK: name: fus | USR: c:@F at fus#$@S at C::*I#
+using Fus = void (C::*)(char);
+void fus(Fus) {}
+// CHECK: name: fus | USR: c:@F at fus#$@S at C::*Fv(#C)#
+
+template <typename T> struct S;
+template <typename T, typename U> struct S<T U::*> {
+  static const bool V = true;
+  // CHECK: name: V | USR: c:@SP>2#T#T at S>#t0.1::*t0.0 at V
+  void f() {}
+  // CHECK: name: f | USR: c:@SP>2#T#T at S>#t0.1::*t0.0 at F@f#
+};
Index: clang/lib/Index/USRGeneration.cpp
===================================================================
--- clang/lib/Index/USRGeneration.cpp
+++ clang/lib/Index/USRGeneration.cpp
@@ -893,6 +893,12 @@
       T = AT->getElementType();
       continue;
     }
+    if (const MemberPointerType *MPT = T->getAs<MemberPointerType>()) {
+      VisitType(QualType(MPT->getClass(), 0));
+      Out << "::*";
+      T = MPT->getPointeeType();
+      continue;
+    }
 
     // Unhandled type.
     Out << ' ';


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102614.347581.patch
Type: text/x-patch
Size: 1587 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210525/8bf8bbde/attachment-0001.bin>


More information about the cfe-commits mailing list