]> granicus.if.org Git - clang/commitdiff
[index] Record references to class receivers used in property references
authorAlex Lorenz <arphaman@gmail.com>
Thu, 18 May 2017 10:43:11 +0000 (10:43 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Thu, 18 May 2017 10:43:11 +0000 (10:43 +0000)
rdar://32250025

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@303343 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Index/IndexBody.cpp
test/Index/Core/index-source.m

index 08d233fb83e040f834b8693251cbd96d81900ce3..efa5ed85d60bb607aa7faad87394cb5f4bfa17ed 100644 (file)
@@ -246,6 +246,9 @@ public:
   }
 
   bool VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
+    if (E->isClassReceiver())
+      IndexCtx.handleReference(E->getClassReceiver(), E->getReceiverLocation(),
+                               Parent, ParentDC);
     if (E->isExplicitProperty()) {
       SmallVector<SymbolRelation, 2> Relations;
       SymbolRoleSet Roles = getRolesForRef(E, Relations);
index 041753b95316bd3f223016696b04b2c2b4fec5f4..7c2f753e71db9ab363f149e9c2fde76301347705 100644 (file)
@@ -385,3 +385,22 @@ Separate separateT;
 // CHECK: [[@LINE-1]]:1 | type-alias/C | Separate | {{.*}} | {{.*}} | Ref,RelCont | rel: 1
 struct Separate separateE;
 // CHECK: [[@LINE-1]]:8 | struct/C | Separate | {{.*}} | {{.*}} | Ref,RelCont | rel: 1
+
+@interface ClassReceivers
+
+@property(class) int p1;
++ (int)implicit;
++ (void)setImplicit:(int)x;
+
+@end
+
+void classReceivers() {
+  ClassReceivers.p1 = 0;
+// CHECK: [[@LINE-1]]:3 | class/ObjC | ClassReceivers | c:objc(cs)ClassReceivers | _OBJC_CLASS_$_ClassReceivers | Ref,RelCont | rel: 1
+  (void)ClassReceivers.p1;
+// CHECK: [[@LINE-1]]:9 | class/ObjC | ClassReceivers | c:objc(cs)ClassReceivers | _OBJC_CLASS_$_ClassReceivers | Ref,RelCont | rel: 1
+  ClassReceivers.implicit = 0;
+// CHECK: [[@LINE-1]]:3 | class/ObjC | ClassReceivers | c:objc(cs)ClassReceivers | _OBJC_CLASS_$_ClassReceivers | Ref,RelCont | rel: 1
+  (void)ClassReceivers.implicit;
+// CHECK: [[@LINE-1]]:9 | class/ObjC | ClassReceivers | c:objc(cs)ClassReceivers | _OBJC_CLASS_$_ClassReceivers | Ref,RelCont | rel: 1
+}