1
2struct SB {
3  virtual void meth();
4};
5
6struct SS : public SB {
7  void submeth() {
8    this->meth();
9    SB::meth();
10  }
11};
12
13@interface IB
14-(void)meth;
15+(void)ClsMeth;
16@end
17
18@interface IS : IB
19-(void)submeth;
20+(void)ClsMeth;
21@end
22
23@implementation IS
24-(void)submeth {
25  [self meth];
26  [super meth];
27}
28+(void)ClsMeth {
29  [super ClsMeth];
30}
31@end
32
33void foo(SS *ss, IS* is, Class cls) {
34  ss->meth();
35  [is meth];
36  [IB ClsMeth];
37  [cls ClsMeth];
38}
39
40@interface NSObject
41+(id)alloc;
42-(id)init;
43@end
44
45@interface Test : NSObject
46@end
47
48void test2() {
49  id o = [[Test alloc] init];
50}
51
52@interface Test2 : NSObject
53@property (assign) id someProp;
54@end
55
56void test3(Test2 *o) {
57  id v = o.someProp;
58}
59
60// RUN: c-index-test -cursor-at=%s:8:11 \
61// RUN:              -cursor-at=%s:9:11 \
62// RUN:              -cursor-at=%s:25:11 \
63// RUN:              -cursor-at=%s:26:11 \
64// RUN:              -cursor-at=%s:29:11 \
65// RUN:              -cursor-at=%s:34:9 \
66// RUN:              -cursor-at=%s:35:9 \
67// RUN:              -cursor-at=%s:36:9 \
68// RUN:              -cursor-at=%s:37:9 \
69// RUN:              -cursor-at=%s:49:26 \
70// RUN:              -cursor-at=%s:57:12 \
71// RUN:       %s | FileCheck %s
72
73// CHECK:     8:11 MemberRefExpr=meth:3:16 {{.*}} Dynamic-call
74// CHECK-NOT: 9:9 {{.*}} Dynamic-call
75// CHECK:     25:3 ObjCMessageExpr=meth:14:8 {{.*}} Dynamic-call Receiver-type=ObjCObjectPointer
76// CHECK-NOT: 26:3 {{.*}} Dynamic-call
77// CHECK-NOT: 29:3 {{.*}} Dynamic-call
78// CHECK:     29:3 {{.*}} Receiver-type=ObjCInterface
79// CHECK:     34:7 MemberRefExpr=meth:3:16 {{.*}} Dynamic-call Receiver-type=Pointer
80// CHECK:     35:3 ObjCMessageExpr=meth:14:8 {{.*}} Dynamic-call Receiver-type=ObjCObjectPointer
81// CHECK-NOT: 36:3 {{.*}} Dynamic-call
82// CHECK:     36:3 {{.*}} Receiver-type=ObjCInterface
83// CHECK:     37:3 ObjCMessageExpr=ClsMeth:15:8 {{.*}} Dynamic-call Receiver-type=ObjCClass
84// CHECK-NOT: 49:10 {{.*}} Dynamic-call
85// CHECK:     57:12 MemberRefExpr=someProp:53:23 {{.*}} Dynamic-call  Receiver-type=ObjCObjectPointer
86