| // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s |
| |
| @interface MySuperClass |
| { |
| @private |
| int private; |
| |
| @protected |
| int protected; |
| |
| @public |
| int public; |
| } |
| @end |
| |
| @implementation MySuperClass |
| - (void) test { |
| int access; |
| MySuperClass *s = 0; |
| access = s->private; |
| access = s->protected; |
| } |
| @end |
| |
| |
| @interface MyClass : MySuperClass |
| @end |
| |
| @implementation MyClass |
| - (void) test { |
| int access; |
| MySuperClass *s = 0; |
| access = s->private; // expected-error {{instance variable 'private' is private}} |
| access = s->protected; |
| MyClass *m=0; |
| access = m->private; // expected-error {{instance variable 'private' is private}} |
| access = m->protected; |
| } |
| @end |
| |
| |
| @interface Deeper : MyClass |
| @end |
| |
| @implementation Deeper |
| - (void) test { |
| int access; |
| MySuperClass *s = 0; |
| access = s->private; // expected-error {{instance variable 'private' is private}} |
| access = s->protected; |
| MyClass *m=0; |
| access = m->private; // expected-error {{instance variable 'private' is private}} |
| access = m->protected; |
| } |
| @end |
| |
| @interface Unrelated |
| @end |
| |
| @implementation Unrelated |
| - (void) test { |
| int access; |
| MySuperClass *s = 0; |
| access = s->private; // expected-error {{instance variable 'private' is private}} |
| access = s->protected; // expected-error {{instance variable 'protected' is protected}} |
| MyClass *m=0; |
| access = m->private; // expected-error {{instance variable 'private' is private}} |
| access = m->protected; // expected-error {{instance variable 'protected' is protected}} |
| } |
| @end |
| |
| int main (void) |
| { |
| MySuperClass *s = 0; |
| int access; |
| access = s->private; // expected-error {{instance variable 'private' is private}} |
| access = s->protected; // expected-error {{instance variable 'protected' is protected}} |
| return 0; |
| } |
| |
| typedef signed char BOOL; |
| typedef unsigned int NSUInteger; |
| typedef struct _NSZone NSZone; |
| @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; |
| @protocol NSObject - (BOOL)isEqual:(id)object; |
| @end |
| @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; |
| @end |
| @interface NSObject <NSObject> {} |
| @end |
| extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); |
| @interface NSResponder : NSObject <NSCoding> {} |
| @end |
| @protocol NSAnimatablePropertyContainer |
| - (id)animator; |
| @end |
| extern NSString *NSAnimationTriggerOrderIn ; |
| @interface NSView : NSResponder <NSAnimatablePropertyContainer> { |
| struct __VFlags2 { |
| } |
| _vFlags2; |
| } |
| @end |
| @class NSFontDescriptor, NSAffineTransform, NSGraphicsContext; |
| @interface NSScrollView : NSView {} |
| @end |
| |
| @class CasperMixerView; |
| @interface CasperDiffScrollView : NSScrollView { |
| @private |
| CasperMixerView *_comparatorView; |
| NSView *someField; |
| } |
| @end |
| |
| @implementation CasperDiffScrollView |
| + (void)initialize {} |
| static void _CasperDiffScrollViewInstallMixerView(CasperDiffScrollView *scrollView) { |
| if (scrollView->someField != ((void *)0)) { |
| } |
| } |
| @end |