| // RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi -verify %s |
| |
| /** |
| When processing @synthesize, treat ivars in a class extension the same as ivars in the class @interface, |
| and treat ivars in a superclass extension the same as ivars in the superclass @interface. |
| In particular, when searching for an ivar to back an @synthesize, do look at ivars in the class's own class |
| extension but ignore any ivars in superclass class extensions. |
| */ |
| |
| @interface Super { |
| int ISA; |
| } |
| @end |
| |
| @interface Super() { |
| int Property; // expected-note {{previously declared 'Property' here}} |
| } |
| @end |
| |
| @interface SomeClass : Super { |
| int interfaceIvar1; |
| int interfaceIvar2; |
| } |
| @property int Property; |
| @property int Property1; |
| @end |
| |
| @interface SomeClass () { |
| int Property1; |
| } |
| @end |
| |
| @implementation SomeClass |
| @synthesize Property; // expected-error {{property 'Property' attempting to use ivar 'Property' declared in super class 'Super'}} |
| @synthesize Property1; // OK |
| @end |