// RUN: %clang_cc1 %s -verify -fsyntax-only -Wno-objc-root-class class ClassA {}; class ClassB { public: ClassB(ClassA* parent=0); ~ClassB(); }; @interface NSObject @end @interface InterfaceA : NSObject @property(nonatomic, assign) ClassA *m_prop1; // expected-note {{here}} @property(nonatomic, assign) ClassB *m_prop2; @end @implementation InterfaceA - (id)test { self.m_prop2 = new ClassB(m_prop1); // expected-error {{use of undeclared identifier 'm_prop1'; did you mean '_m_prop1'?}} } @end // rdar://30310772 @interface InvalidNameInIvarAndPropertyBase { @public float _a; } @property float _b; @end void invalidNameInIvarAndPropertyBase() { float a = ((InvalidNameInIvarAndPropertyBase*)node)->_a; // expected-error {{use of undeclared identifier 'node'}} float b = ((InvalidNameInIvarAndPropertyBase*)node)._b; // expected-error {{use of undeclared identifier 'node'}} } // rdar://problem/33102722 // Typo correction for a property when it has as correction candidates // synthesized ivar and a class name, both at the same edit distance. @class TypoCandidate; @interface PropertyType : NSObject @property int x; @end @interface InterfaceC : NSObject @property(assign) PropertyType *typoCandidate; // expected-note {{'_typoCandidate' declared here}} @end @implementation InterfaceC -(void)method { typoCandidate.x = 0; // expected-error {{use of undeclared identifier 'typoCandidate'; did you mean '_typoCandidate'?}} } @end // rdar://35172419 // The scope of 'do-while' ends before typo-correction takes place. struct Mat2 { int rows; }; @implementation ImplNoInt // expected-warning {{cannot find interface declaration for 'ImplNoInt'}} - (void)typoCorrentInDoWhile { Mat2 tlMat1; // expected-note {{'tlMat1' declared here}} // Create many scopes to exhaust the cache. do { for (int index = 0; index < 2; index++) { if (true) { for (int specialTileType = 1; specialTileType < 5; specialTileType++) { for (int i = 0; i < 10; i++) { for (double scale = 0.95; scale <= 1.055; scale += 0.05) { for (int j = 0; j < 10; j++) { if (1 > 0.9) { for (int sptile = 1; sptile < 5; sptile++) { } } } } } } } } } while (tlMat.rows); // expected-error {{use of undeclared identifier 'tlMat'; did you mean 'tlMat1'}} } @end