Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaObjC / typo-correction.m
blob5635f5f56fcf8cbce47d3bbcd70a56062f1df3dd
1 // RUN: %clang_cc1 %s -verify -fsyntax-only -fobjc-runtime=ios
3 @protocol P
4 -(id)description;
5 @end
7 @interface B<P>
8 @property int x;
9 @end
11 @interface S : B {
12   id _someivar; // expected-note {{here}}
14 @end
16 // Spell-checking 'undefined' is ok.
17 undefined var; // expected-error {{unknown type name}}
19 typedef 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;
27 -(void)test {
28   [self foo:[super description] other:someivar]; // expected-error {{use of undeclared identifier 'someivar'; did you mean '_someivar'?}}
30 @end
32 __attribute__ (( __objc_root_class__ ))
33 @interface I {
34   id _interface; // expected-note {{'_interface' declared here}}
36 -(void)method;
37 @end
39 @interface I () {
40   id _extension; // expected-note {{'_extension' declared here}}
42 @end
44 @implementation I {
45   id _implementation; // expected-note {{'_implementation' declared here}}
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'?}}
52 @end
54 // Typo correction for a property when it has as correction candidates
55 // synthesized ivar and a class name, both at the same edit distance.
56 @class TypoCandidate;
58 __attribute__ (( __objc_root_class__ ))
59 @interface PropertyType
60 @property int x;
61 @end
63 __attribute__ (( __objc_root_class__ ))
64 @interface InterfaceC
65 @property(assign) PropertyType *typoCandidate; // expected-note {{'_typoCandidate' declared here}}
66 @end
68 @implementation InterfaceC
69 -(void)method {
70   typoCandidate.x = 0; // expected-error {{use of undeclared identifier 'typoCandidate'; did you mean '_typoCandidate'?}}
72 @end