[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