Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
      2 
      3 @interface MySuperClass
      4 {
      5 @private
      6   int private;
      7 
      8 @protected
      9   int protected;
     10 
     11 @public
     12   int public;
     13 }
     14 @end
     15 
     16 @implementation MySuperClass
     17 - (void) test {
     18     int access;
     19     MySuperClass *s = 0;
     20     access = s->private;   
     21     access = s->protected;
     22 }
     23 @end
     24 
     25 
     26 @interface MyClass : MySuperClass 
     27 @end
     28 
     29 @implementation MyClass
     30 - (void) test {
     31     int access;
     32     MySuperClass *s = 0;
     33     access = s->private; // expected-error {{instance variable 'private' is private}}
     34     access = s->protected;
     35     MyClass *m=0;
     36     access = m->private; // expected-error {{instance variable 'private' is private}}
     37     access = m->protected;
     38 }
     39 @end
     40 
     41 
     42 @interface Deeper : MyClass
     43 @end
     44 
     45 @implementation Deeper 
     46 - (void) test {
     47     int access;
     48     MySuperClass *s = 0;
     49     access = s->private; // expected-error {{instance variable 'private' is private}}
     50     access = s->protected;
     51     MyClass *m=0;
     52     access = m->private; // expected-error {{instance variable 'private' is private}}
     53     access = m->protected;
     54 }
     55 @end
     56 
     57 @interface Unrelated
     58 @end
     59 
     60 @implementation Unrelated 
     61 - (void) test {
     62     int access;
     63     MySuperClass *s = 0;
     64     access = s->private; // expected-error {{instance variable 'private' is private}}
     65     access = s->protected; // expected-error {{instance variable 'protected' is protected}}
     66     MyClass *m=0;
     67     access = m->private; // expected-error {{instance variable 'private' is private}}
     68     access = m->protected; // expected-error {{instance variable 'protected' is protected}}
     69 }
     70 @end
     71 
     72 int main (void)
     73 {
     74   MySuperClass *s = 0;
     75   int access;
     76   access = s->private;   // expected-error {{instance variable 'private' is private}}
     77   access = s->protected; // expected-error {{instance variable 'protected' is protected}}
     78   return 0;
     79 }
     80 
     81 typedef signed char BOOL;
     82 typedef unsigned int NSUInteger;
     83 typedef struct _NSZone NSZone;
     84 @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;
     85 @protocol NSObject  - (BOOL)isEqual:(id)object;
     86 @end
     87 @protocol NSCoding  - (void)encodeWithCoder:(NSCoder *)aCoder;
     88 @end 
     89 @interface NSObject <NSObject> {}
     90 @end
     91 extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone);
     92 @interface NSResponder : NSObject <NSCoding> {}
     93 @end 
     94 @protocol NSAnimatablePropertyContainer
     95 - (id)animator;
     96 @end
     97 extern NSString *NSAnimationTriggerOrderIn ;
     98 @interface NSView : NSResponder  <NSAnimatablePropertyContainer>  {
     99   struct __VFlags2 {
    100   }
    101   _vFlags2;
    102 }
    103 @end
    104 @class NSFontDescriptor, NSAffineTransform, NSGraphicsContext;
    105 @interface NSScrollView : NSView {}
    106 @end
    107 
    108 @class CasperMixerView;
    109 @interface CasperDiffScrollView : NSScrollView {
    110 @private
    111   CasperMixerView *_comparatorView;
    112   NSView *someField;
    113 }
    114 @end
    115 
    116 @implementation CasperDiffScrollView
    117 + (void)initialize {}
    118 static void _CasperDiffScrollViewInstallMixerView(CasperDiffScrollView *scrollView) {
    119   if (scrollView->someField != ((void *)0)) {
    120   }
    121 }
    122 @end
    123