r262693 - [index] In ObjC++ handle objc type parameters for function USRs.
Argyrios Kyrtzidis via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 3 23:17:43 PST 2016
Author: akirtzidis
Date: Fri Mar 4 01:17:43 2016
New Revision: 262693
URL: http://llvm.org/viewvc/llvm-project?rev=262693&view=rev
Log:
[index] In ObjC++ handle objc type parameters for function USRs.
Added:
cfe/trunk/test/Index/Core/index-source.mm
Modified:
cfe/trunk/lib/Index/USRGeneration.cpp
Modified: cfe/trunk/lib/Index/USRGeneration.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/USRGeneration.cpp?rev=262693&r1=262692&r2=262693&view=diff
==============================================================================
--- cfe/trunk/lib/Index/USRGeneration.cpp (original)
+++ cfe/trunk/lib/Index/USRGeneration.cpp Fri Mar 4 01:17:43 2016
@@ -663,6 +663,11 @@ void USRGenerator::VisitType(QualType T)
T = PT->getPointeeType();
continue;
}
+ if (const ObjCObjectPointerType *OPT = T->getAs<ObjCObjectPointerType>()) {
+ Out << '*';
+ T = OPT->getPointeeType();
+ continue;
+ }
if (const RValueReferenceType *RT = T->getAs<RValueReferenceType>()) {
Out << "&&";
T = RT->getPointeeType();
@@ -697,6 +702,18 @@ void USRGenerator::VisitType(QualType T)
VisitTagDecl(TT->getDecl());
return;
}
+ if (const ObjCInterfaceType *OIT = T->getAs<ObjCInterfaceType>()) {
+ Out << '$';
+ VisitObjCInterfaceDecl(OIT->getDecl());
+ return;
+ }
+ if (const ObjCObjectType *OIT = T->getAs<ObjCObjectType>()) {
+ Out << 'Q';
+ VisitType(OIT->getBaseType());
+ for (auto *Prot : OIT->getProtocols())
+ VisitObjCProtocolDecl(Prot);
+ return;
+ }
if (const TemplateTypeParmType *TTP = T->getAs<TemplateTypeParmType>()) {
Out << 't' << TTP->getDepth() << '.' << TTP->getIndex();
return;
Added: cfe/trunk/test/Index/Core/index-source.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/Core/index-source.mm?rev=262693&view=auto
==============================================================================
--- cfe/trunk/test/Index/Core/index-source.mm (added)
+++ cfe/trunk/test/Index/Core/index-source.mm Fri Mar 4 01:17:43 2016
@@ -0,0 +1,11 @@
+// RUN: c-index-test core -print-source-symbols -- %s -target x86_64-apple-macosx10.7 | FileCheck %s
+
+ at interface MyCls
+ at end
+
+ at protocol P1,P2;
+
+// CHECK: [[@LINE+1]]:6 | function/C | foo | c:@F at foo#*$objc(cs)MyCls# | __Z3fooP5MyCls | Decl | rel: 0
+void foo(MyCls *o);
+// CHECK: [[@LINE+1]]:6 | function/C | foo | c:@F at foo#*Qoobjc(pl)P1objc(pl)P2# | __Z3fooPU15objcproto2P12P211objc_object | Decl | rel: 0
+void foo(id<P2, P1> o);
More information about the cfe-commits
mailing list