|  | 
 | struct SB { | 
 |   virtual void meth(); | 
 | }; | 
 |  | 
 | struct SS : public SB { | 
 |   void submeth() { | 
 |     this->meth(); | 
 |     SB::meth(); | 
 |   } | 
 | }; | 
 |  | 
 | @interface IB | 
 | -(void)meth; | 
 | +(void)ClsMeth; | 
 | @end | 
 |  | 
 | @interface IS : IB | 
 | -(void)submeth; | 
 | +(void)ClsMeth; | 
 | @end | 
 |  | 
 | @implementation IS | 
 | -(void)submeth { | 
 |   [self meth]; | 
 |   [super meth]; | 
 | } | 
 | +(void)ClsMeth { | 
 |   [super ClsMeth]; | 
 | } | 
 | @end | 
 |  | 
 | void foo(SS *ss, IS* is, Class cls) { | 
 |   ss->meth(); | 
 |   [is meth]; | 
 |   [IB ClsMeth]; | 
 |   [cls ClsMeth]; | 
 | } | 
 |  | 
 | @interface NSObject | 
 | +(id)alloc; | 
 | -(id)init; | 
 | @end | 
 |  | 
 | @interface Test : NSObject | 
 | @end | 
 |  | 
 | void test2() { | 
 |   id o = [[Test alloc] init]; | 
 | } | 
 |  | 
 | @interface Test2 : NSObject | 
 | @property (assign) id someProp; | 
 | @end | 
 |  | 
 | void test3(Test2 *o) { | 
 |   id v = o.someProp; | 
 | } | 
 |  | 
 | // RUN: c-index-test -cursor-at=%s:8:11 \ | 
 | // RUN:              -cursor-at=%s:9:11 \ | 
 | // RUN:              -cursor-at=%s:25:11 \ | 
 | // RUN:              -cursor-at=%s:26:11 \ | 
 | // RUN:              -cursor-at=%s:29:11 \ | 
 | // RUN:              -cursor-at=%s:34:9 \ | 
 | // RUN:              -cursor-at=%s:35:9 \ | 
 | // RUN:              -cursor-at=%s:36:9 \ | 
 | // RUN:              -cursor-at=%s:37:9 \ | 
 | // RUN:              -cursor-at=%s:49:26 \ | 
 | // RUN:              -cursor-at=%s:57:12 \ | 
 | // RUN:       %s | FileCheck %s | 
 |  | 
 | // CHECK:     8:11 MemberRefExpr=meth:3:16 {{.*}} Dynamic-call | 
 | // CHECK-NOT: 9:9 {{.*}} Dynamic-call | 
 | // CHECK:     25:3 ObjCMessageExpr=meth:14:8 {{.*}} Dynamic-call Receiver-type=ObjCObjectPointer | 
 | // CHECK-NOT: 26:3 {{.*}} Dynamic-call | 
 | // CHECK-NOT: 29:3 {{.*}} Dynamic-call | 
 | // CHECK:     29:3 {{.*}} Receiver-type=ObjCInterface | 
 | // CHECK:     34:7 MemberRefExpr=meth:3:16 {{.*}} Dynamic-call Receiver-type=Pointer | 
 | // CHECK:     35:3 ObjCMessageExpr=meth:14:8 {{.*}} Dynamic-call Receiver-type=ObjCObjectPointer | 
 | // CHECK-NOT: 36:3 {{.*}} Dynamic-call | 
 | // CHECK:     36:3 {{.*}} Receiver-type=ObjCInterface | 
 | // CHECK:     37:3 ObjCMessageExpr=ClsMeth:15:8 {{.*}} Dynamic-call Receiver-type=ObjCClass | 
 | // CHECK-NOT: 49:10 {{.*}} Dynamic-call | 
 | // CHECK:     57:12 MemberRefExpr=someProp:53:23 {{.*}} Dynamic-call  Receiver-type=ObjCObjectPointer |