|  | // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %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 {{instance variables may not be placed in categories}} | 
|  | } | 
|  | @end | 
|  |  | 
|  | @interface SomeClass (Category1) | 
|  | { | 
|  | } | 
|  | @end |