1// RUN: %clang_cc1 %s -verify -fsyntax-only -fobjc-runtime=ios
2
3@protocol P
4-(id)description;
5@end
6
7@interface B<P>
8@property int x;
9@end
10
11@interface S : B {
12  id _someivar; // expected-note {{here}}
13}
14@end
15
16// Spell-checking 'undefined' is ok.
17undefined var; // expected-error {{unknown type name}}
18
19typedef int super1;
20@implementation S
21-(void)foo:(id)p1 other:(id)p2 {
22  // Spell-checking 'super' is not ok.
23  super.x = 0;
24  self.x = 0;
25}
26
27-(void)test {
28  [self foo:[super description] other:someivar]; // expected-error {{use of undeclared identifier 'someivar'; did you mean '_someivar'?}}
29}
30@end
31
32__attribute__ (( __objc_root_class__ ))
33@interface I {
34  id _interface; // expected-note {{'_interface' declared here}}
35}
36-(void)method;
37@end
38
39@interface I () {
40  id _extension; // expected-note {{'_extension' declared here}}
41}
42@end
43
44@implementation I {
45  id _implementation; // expected-note {{'_implementation' declared here}}
46}
47-(void)method {
48  (void)self->implementation; // expected-error {{'I' does not have a member named 'implementation'; did you mean '_implementation'?}}
49  (void)self->interface; // expected-error {{'I' does not have a member named 'interface'; did you mean '_interface'?}}
50  (void)self->extension; // expected-error {{'I' does not have a member named 'extension'; did you mean '_extension'?}}
51}
52@end
53
54// rdar://problem/33102722
55// Typo correction for a property when it has as correction candidates
56// synthesized ivar and a class name, both at the same edit distance.
57@class TypoCandidate;
58
59__attribute__ (( __objc_root_class__ ))
60@interface PropertyType
61@property int x;
62@end
63
64__attribute__ (( __objc_root_class__ ))
65@interface InterfaceC
66@property(assign) PropertyType *typoCandidate; // expected-note {{'_typoCandidate' declared here}}
67@end
68
69@implementation InterfaceC
70-(void)method {
71  typoCandidate.x = 0; // expected-error {{use of undeclared identifier 'typoCandidate'; did you mean '_typoCandidate'?}}
72}
73@end
74