1322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor/* Note: the RUN lines are near the end of the file, since line/column
2322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor matter for this test. */
3d98abd8c68bd96e111a0bebdb90f38cf2a5632a2Douglas Gregor@class MyClass;
4322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@interface I1
5322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor{
6322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor  id StoredProp3;
7322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor  int RandomIVar;
8322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor}
9424b2a546dbd09cf70d43087771c7fff851ca158Douglas Gregor@property int Prop0;
10322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@property int Prop1;
11322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@property float Prop2;
12322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@end
13322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor
14322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@interface I2 : I1
15322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@property id Prop3;
16424b2a546dbd09cf70d43087771c7fff851ca158Douglas Gregor@property id Prop4;
17322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@end
18322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor
19322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@implementation I2
20322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@synthesize Prop2, Prop1, Prop3 = StoredProp3;
21424b2a546dbd09cf70d43087771c7fff851ca158Douglas Gregor@dynamic Prop4;
22322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor@end
23322328b8a65ad2e45829eb06d245addb64037f6fDouglas Gregor
247344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor@interface I3 : I2
257344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor@property id Prop3;
267344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor@end
277344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor
287344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregorid test(I3 *i3) {
297344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor  return i3.Prop3;
307344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor}
317344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor
32e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor@interface I4
33e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor@property id Prop2;
34e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor@end
35e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor
36e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor@interface I4 () {
37e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor  I4 *Prop1;
38e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor}
39e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor@end
40e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor
41e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor@implementation I4 {
42e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor  id Prop2_;
43e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor}
44e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor
45e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor@synthesize Prop2 = Prop2_;
46e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor@end
47e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor
48b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@protocol P1
49b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@property int Prop5;
50b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@end
51b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor
52b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@class P1;
53b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor
54b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@interface I5<P1>
55b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@end
56b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@implementation I5
57b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@synthesize Prop5;
58b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor@end
59424b2a546dbd09cf70d43087771c7fff851ca158Douglas Gregor// RUN: c-index-test -code-completion-at=%s:20:13 %s | FileCheck -check-prefix=CHECK-CC1 %s
60ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC1: ObjCPropertyDecl:{ResultType int}{TypedText Prop0}
61ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC1: ObjCPropertyDecl:{ResultType int}{TypedText Prop1}
62ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC1: ObjCPropertyDecl:{ResultType float}{TypedText Prop2}
63ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC1: ObjCPropertyDecl:{ResultType id}{TypedText Prop3}
64ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC1: ObjCPropertyDecl:{ResultType id}{TypedText Prop4}
65424b2a546dbd09cf70d43087771c7fff851ca158Douglas Gregor// RUN: c-index-test -code-completion-at=%s:20:20 %s | FileCheck -check-prefix=CHECK-CC2 %s
66ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC2: ObjCPropertyDecl:{ResultType int}{TypedText Prop0}
67ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC2: ObjCPropertyDecl:{ResultType int}{TypedText Prop1}
68ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC2-NEXT: ObjCPropertyDecl:{ResultType id}{TypedText Prop3}
69ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC2: ObjCPropertyDecl:{ResultType id}{TypedText Prop4}
70424b2a546dbd09cf70d43087771c7fff851ca158Douglas Gregor// RUN: c-index-test -code-completion-at=%s:20:35 %s | FileCheck -check-prefix=CHECK-CC3 %s
71e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor// CHECK-CC3: ObjCIvarDecl:{ResultType id}{TypedText _Prop3} (36)
72aa490cb6a70e7ff0335bdc4c88619e00ff0dab25Douglas Gregor// CHECK-CC3: ObjCIvarDecl:{ResultType int}{TypedText RandomIVar} (35)
73e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor// CHECK-CC3: ObjCIvarDecl:{ResultType id}{TypedText StoredProp3} (8)
74aa490cb6a70e7ff0335bdc4c88619e00ff0dab25Douglas Gregor
75424b2a546dbd09cf70d43087771c7fff851ca158Douglas Gregor// RUN: c-index-test -code-completion-at=%s:21:10 %s | FileCheck -check-prefix=CHECK-CC4 %s
76ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC4: ObjCPropertyDecl:{ResultType int}{TypedText Prop0}
77ff5ce6eefc7c253ef6edf4d4bfc996fdd82d09aaDouglas Gregor// CHECK-CC4-NEXT: ObjCPropertyDecl:{ResultType id}{TypedText Prop4}
787344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor
797344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor// RUN: c-index-test -code-completion-at=%s:29:13 %s | FileCheck -check-prefix=CHECK-CC5 %s
807344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor// CHECK-CC5: ObjCPropertyDecl:{ResultType int}{TypedText Prop0} (35)
817344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor// CHECK-CC5-NEXT: ObjCPropertyDecl:{ResultType int}{TypedText Prop1} (35)
827344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor// CHECK-CC5-NEXT: ObjCPropertyDecl:{ResultType float}{TypedText Prop2} (35)
837344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor// CHECK-CC5-NEXT: ObjCPropertyDecl:{ResultType id}{TypedText Prop3} (35)
847344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor// CHECK-CC5-NEXT: ObjCPropertyDecl:{ResultType id}{TypedText Prop4} (35)
857344921b22bebec4f86eb8eb865150b2978b5d2eDouglas Gregor
86d98abd8c68bd96e111a0bebdb90f38cf2a5632a2Douglas Gregor// RUN: c-index-test -code-completion-at=%s:9:11 %s | FileCheck -check-prefix=CHECK-CC6 %s
87d98abd8c68bd96e111a0bebdb90f38cf2a5632a2Douglas Gregor// CHECK-CC6: ObjCInterfaceDecl:{TypedText MyClass} (50)
88d98abd8c68bd96e111a0bebdb90f38cf2a5632a2Douglas Gregor
89e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor
90e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor// RUN: c-index-test -code-completion-at=%s:45:21 -fobjc-nonfragile-abi %s | FileCheck -check-prefix=CHECK-CC7 %s
91e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor// CHECK-CC7-NOT: ObjCIvarDecl:{ResultType id}{TypedText _Prop2}
92e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor// CHECK-CC7: ObjCIvarDecl:{ResultType I4 *}{TypedText Prop1} (17)
93e84260513dc9fc17904c30c9400c5862a2d7fcb8Douglas Gregor// CHECK-CC7: ObjCIvarDecl:{ResultType id}{TypedText Prop2_} (7)
94b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor
95b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor// RUN: c-index-test -code-completion-at=%s:57:13 -fobjc-nonfragile-abi %s | FileCheck -check-prefix=CHECK-CC8 %s
96b92a4089db33ae9d44e015cf2dfd1e82fea88747Douglas Gregor// CHECK-CC8: ObjCPropertyDecl:{ResultType int}{TypedText Prop5} (35)
97