1// RUN: %clang_cc1 -fsyntax-only -fobjc-arc -fobjc-runtime-has-weak -Wdirect-ivar-access -verify -Wno-objc-root-class %s 2// rdar://6505197 3 4__attribute__((objc_root_class)) @interface MyObject { 5@public 6 id _myMaster; 7 id _isTickledPink; // expected-error {{existing instance variable '_isTickledPink' for property 'isTickledPink'}} 8 int _myIntProp; 9} 10@property(retain) id myMaster; 11@property(assign) id isTickledPink; // expected-note {{property declared here}} 12@property int myIntProp; 13@end 14 15@implementation MyObject 16 17@synthesize myMaster = _myMaster; 18@synthesize isTickledPink = _isTickledPink; // expected-note {{property synthesized here}} 19@synthesize myIntProp = _myIntProp; 20 21- (void) doSomething { 22 _myMaster = _isTickledPink; // expected-warning {{instance variable '_myMaster' is being directly accessed}} \ 23 // expected-warning {{instance variable '_isTickledPink' is being directly accessed}} 24} 25 26- (id) init { 27 _myMaster=0; 28 return _myMaster; 29} 30- (void) dealloc { _myMaster = 0; } 31@end 32 33MyObject * foo () 34{ 35 MyObject* p=0; 36 p.isTickledPink = p.myMaster; // ok 37 p->_isTickledPink = (*p)._myMaster; // expected-warning {{instance variable '_isTickledPink' is being directly accessed}} \ 38 // expected-warning {{instance variable '_myMaster' is being directly accessed}} 39 if (p->_myIntProp) // expected-warning {{instance variable '_myIntProp' is being directly accessed}} 40 p->_myIntProp = 0; // expected-warning {{instance variable '_myIntProp' is being directly accessed}} 41 return p->_isTickledPink; // expected-warning {{instance variable '_isTickledPink' is being directly accessed}} 42} 43 44@interface ITest32 { 45@public 46 id ivar; 47} 48@end 49 50id Test32(__weak ITest32 *x) { 51 __weak ITest32 *y; 52 x->ivar = 0; // expected-error {{dereferencing a __weak pointer is not allowed}} 53 return y ? y->ivar // expected-error {{dereferencing a __weak pointer is not allowed}} 54 : (*x).ivar; // expected-error {{dereferencing a __weak pointer is not allowed}} 55} 56 57// rdar://13142820 58@protocol PROTOCOL 59@property (copy, nonatomic) id property_in_protocol; 60@end 61 62__attribute__((objc_root_class)) @interface INTF <PROTOCOL> 63@property (copy, nonatomic) id foo; 64- (id) foo; 65@end 66 67@interface INTF() 68@property (copy, nonatomic) id foo1; 69- (id) foo1; 70@end 71 72@implementation INTF 73- (id) foo { return _foo; } 74- (id) property_in_protocol { return _property_in_protocol; } // expected-warning {{instance variable '_property_in_protocol' is being directly accessed}} 75- (id) foo1 { return _foo1; } 76@synthesize property_in_protocol = _property_in_protocol; 77@end 78 79