1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 /** 4 When processing @synthesize, treat ivars in a class extension the same as ivars in the class @interface, 5 and treat ivars in a superclass extension the same as ivars in the superclass @interface. 6 In particular, when searching for an ivar to back an @synthesize, do look at ivars in the class's own class 7 extension but ignore any ivars in superclass class extensions. 8 */ 9 10 @interface Super { 11 int ISA; 12 } 13 @end 14 15 @interface Super() { 16 int Property; // expected-note {{previously declared 'Property' here}} 17 } 18 @end 19 20 @interface SomeClass : Super { 21 int interfaceIvar1; 22 int interfaceIvar2; 23 } 24 @property int Property; 25 @property int Property1; 26 @end 27 28 @interface SomeClass () { 29 int Property1; 30 } 31 @end 32 33 @implementation SomeClass 34 @synthesize Property; // expected-error {{property 'Property' attempting to use instance variable 'Property' declared in super class 'Super'}} 35 @synthesize Property1; // OK 36 @end 37