Clang Project

clang_source_code/test/SemaObjCXX/typo-correction.mm
1// RUN: %clang_cc1 %s -verify -fsyntax-only -Wno-objc-root-class
2
3class ClassA {};
4
5class ClassB {
6public:
7  ClassB(ClassA* parent=0);
8  ~ClassB();
9};
10
11@interface NSObject
12@end
13
14@interface InterfaceA : NSObject
15@property(nonatomic, assign) ClassA *m_prop1; // expected-note {{here}}
16@property(nonatomic, assign) ClassB *m_prop2;
17@end
18
19@implementation InterfaceA
20- (id)test {
21  self.m_prop2 = new ClassB(m_prop1); // expected-error {{use of undeclared identifier 'm_prop1'; did you mean '_m_prop1'?}}
22}
23@end
24
25// rdar://30310772
26
27@interface InvalidNameInIvarAndPropertyBase
28{
29@public
30  float  _a;
31}
32@property float _b;
33@end
34
35void invalidNameInIvarAndPropertyBase() {
36  float a = ((InvalidNameInIvarAndPropertyBase*)node)->_a; // expected-error {{use of undeclared identifier 'node'}}
37  float b = ((InvalidNameInIvarAndPropertyBase*)node)._b; // expected-error {{use of undeclared identifier 'node'}}
38}
39
40// rdar://problem/33102722
41// Typo correction for a property when it has as correction candidates
42// synthesized ivar and a class name, both at the same edit distance.
43@class TypoCandidate;
44
45@interface PropertyType : NSObject
46@property int x;
47@end
48
49@interface InterfaceC : NSObject
50@property(assign) PropertyType *typoCandidate; // expected-note {{'_typoCandidate' declared here}}
51@end
52
53@implementation InterfaceC
54-(void)method {
55  typoCandidate.x = 0; // expected-error {{use of undeclared identifier 'typoCandidate'; did you mean '_typoCandidate'?}}
56}
57@end
58
59// rdar://35172419
60// The scope of 'do-while' ends before typo-correction takes place.
61
62struct Mat2 { int rows; };
63
64@implementation ImplNoInt // expected-warning {{cannot find interface declaration for 'ImplNoInt'}}
65
66- (void)typoCorrentInDoWhile {
67  Mat2 tlMat1; // expected-note {{'tlMat1' declared here}}
68  // Create many scopes to exhaust the cache.
69  do {
70    for (int index = 0; index < 2; index++) {
71      if (true) {
72        for (int specialTileType = 1; specialTileType < 5; specialTileType++) {
73          for (int i = 0; i < 10; i++) {
74            for (double scale = 0.95; scale <= 1.055; scale += 0.05) {
75              for (int j = 0; j < 10; j++) {
76                if (1 > 0.9) {
77                    for (int sptile = 1; sptile < 5; sptile++) {
78                    }
79                }
80              }
81            }
82          }
83        }
84      }
85    }
86  } while (tlMat.rows); // expected-error {{use of undeclared identifier 'tlMat'; did you mean 'tlMat1'}}
87}
88
89@end
90