| // RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi -verify %s |
| |
| @interface SomeClass @end |
| |
| int fn1(SomeClass *obj) { |
| obj->privateIvar = 1; // expected-error {{'SomeClass' does not have a member named 'privateIvar}} |
| return obj->publicIvar; // expected-error {{'SomeClass' does not have a member named 'publicIvar'}} |
| } |
| |
| @interface SomeClass () { |
| // @private by default |
| int privateIvar; |
| @public |
| int publicIvar; |
| } |
| @end |
| |
| int fn2(SomeClass *obj) { |
| obj->publicIvar = 1; |
| return obj->publicIvar // ok |
| + obj->privateIvar; // expected-error {{instance variable 'privateIvar' is private}} |
| } |
| |
| @implementation SomeClass |
| |
| int fn3(SomeClass *obj) { |
| obj->privateIvar = 2; |
| return obj->publicIvar // ok |
| + obj->privateIvar; // ok |
| } |
| @end |
| |
| @interface SomeClass (Category) |
| { |
| int categoryIvar; // expected-error {{ivars may not be placed in categories}} |
| } |
| @end |
| |
| @interface SomeClass (Category1) |
| { |
| } |
| @end |