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