1*67e74705SXin Li// RUN: rm -rf %t 2*67e74705SXin Li// RUN: %clang_cc1 -fblocks -objcmt-migrate-readwrite-property -objcmt-ns-nonatomic-iosonly -objcmt-migrate-readonly-property -objcmt-atomic-property -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11 3*67e74705SXin Li// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result 4*67e74705SXin Li// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result 5*67e74705SXin Li 6*67e74705SXin Li#define WEBKIT_OBJC_METHOD_ANNOTATION(ANNOTATION) ANNOTATION 7*67e74705SXin Li#define WEAK_IMPORT_ATTRIBUTE __attribute__((objc_arc_weak_reference_unavailable)) 8*67e74705SXin Li#define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER 9*67e74705SXin Li#define DEPRECATED __attribute__((deprecated)) 10*67e74705SXin Li 11*67e74705SXin Li// rdar://15442742 12*67e74705SXin Li#if TARGET_OS_IPHONE 13*67e74705SXin Li #define NS_NONATOMIC_IOSONLY nonatomic 14*67e74705SXin Li#else 15*67e74705SXin Li #define NS_NONATOMIC_IOSONLY atomic 16*67e74705SXin Li#endif 17*67e74705SXin Li 18*67e74705SXin Litypedef char BOOL; 19*67e74705SXin Li@class NSString; 20*67e74705SXin Li@protocol NSCopying @end 21*67e74705SXin Li 22*67e74705SXin Li@interface NSObject <NSCopying> 23*67e74705SXin Li@end 24*67e74705SXin Li 25*67e74705SXin Li@interface NSDictionary : NSObject 26*67e74705SXin Li@end 27*67e74705SXin Li 28*67e74705SXin Li@interface I : NSObject { 29*67e74705SXin Li int ivarVal; 30*67e74705SXin Li} 31*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, weak) NSString *WeakProp; 32*67e74705SXin Li 33*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSString *StrongProp; 34*67e74705SXin Li 35*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSString *UnavailProp __attribute__((unavailable)); 36*67e74705SXin Li- (void) setUnavailProp : (NSString *)Val; 37*67e74705SXin Li 38*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSString *UnavailProp1 __attribute__((unavailable)); 39*67e74705SXin Li 40*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSString *UnavailProp2; 41*67e74705SXin Li- (void) setUnavailProp2 : (NSString *)Val __attribute__((unavailable)); 42*67e74705SXin Li 43*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, copy) NSDictionary *undoAction; 44*67e74705SXin Li@end 45*67e74705SXin Li 46*67e74705SXin Li@implementation I 47*67e74705SXin Li@end 48*67e74705SXin Li 49*67e74705SXin Li@class NSArray; 50*67e74705SXin Li 51*67e74705SXin Li@interface MyClass2 { 52*67e74705SXin Li@private 53*67e74705SXin Li NSArray *_names1; 54*67e74705SXin Li NSArray *_names2; 55*67e74705SXin Li NSArray *_names3; 56*67e74705SXin Li NSArray *_names4; 57*67e74705SXin Li} 58*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSArray *names2; 59*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSArray *names3; 60*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSArray *names4; 61*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSArray *names1; 62*67e74705SXin Li@end 63*67e74705SXin Li 64*67e74705SXin Li// Properties that contain the name "delegate" or "dataSource", 65*67e74705SXin Li// or have exact name "target" have unsafe_unretained attribute. 66*67e74705SXin Li@interface NSInvocation 67*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, assign) id target; 68*67e74705SXin Li 69*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, assign) id dataSource; 70*67e74705SXin Li 71*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, assign) id xxxdelegateYYY; 72*67e74705SXin Li 73*67e74705SXin Li 74*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) id MYtarget; 75*67e74705SXin Li 76*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) id targetX; 77*67e74705SXin Li 78*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY) int value; 79*67e74705SXin Li 80*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=isContinuous) BOOL continuous; 81*67e74705SXin Li 82*67e74705SXin Li- (id) isAnObject; 83*67e74705SXin Li- (void)setAnObject : (id) object; 84*67e74705SXin Li 85*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=isinValid, readonly) BOOL inValid; 86*67e74705SXin Li- (void) setInValid : (BOOL) arg; 87*67e74705SXin Li 88*67e74705SXin Li- (void) Nothing; 89*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, readonly) int Length; 90*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, readonly, strong) id object; 91*67e74705SXin Li+ (double) D; 92*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, readonly) void *JSObject WEBKIT_OBJC_METHOD_ANNOTATION(AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER); 93*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=isIgnoringInteractionEvents, readonly) BOOL ignoringInteractionEvents; 94*67e74705SXin Li 95*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getStringValue, strong) NSString *stringValue; 96*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getCounterValue, readonly) BOOL counterValue; 97*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getns_dixtionary, readonly, copy) NSDictionary *ns_dixtionary; 98*67e74705SXin Li 99*67e74705SXin Li- (BOOL)is3bar; // watch out 100*67e74705SXin Li- (NSString *)get3foo; // watch out 101*67e74705SXin Li 102*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getM, readonly) BOOL m; 103*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getMA, readonly) BOOL MA; 104*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getALL, readonly) BOOL ALL; 105*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getMANY, readonly) BOOL MANY; 106*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getSome, readonly) BOOL some; 107*67e74705SXin Li@end 108*67e74705SXin Li 109*67e74705SXin Li 110*67e74705SXin Li@interface NSInvocation(CAT) 111*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, assign) id target; 112*67e74705SXin Li 113*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, assign) id dataSource; 114*67e74705SXin Li 115*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, assign) id xxxdelegateYYY; 116*67e74705SXin Li 117*67e74705SXin Li 118*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) id MYtarget; 119*67e74705SXin Li 120*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) id targetX; 121*67e74705SXin Li 122*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY) int value; 123*67e74705SXin Li 124*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=isContinuous) BOOL continuous; 125*67e74705SXin Li 126*67e74705SXin Li- (id) isAnObject; 127*67e74705SXin Li- (void)setAnObject : (id) object; 128*67e74705SXin Li 129*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=isinValid, readonly) BOOL inValid; 130*67e74705SXin Li- (void) setInValid : (BOOL) arg; 131*67e74705SXin Li 132*67e74705SXin Li- (void) Nothing; 133*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, readonly) int Length; 134*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, readonly, strong) id object; 135*67e74705SXin Li+ (double) D; 136*67e74705SXin Li 137*67e74705SXin Li- (BOOL)is3bar; // watch out 138*67e74705SXin Li- (NSString *)get3foo; // watch out 139*67e74705SXin Li 140*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getM, readonly) BOOL m; 141*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getMA, readonly) BOOL MA; 142*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getALL, readonly) BOOL ALL; 143*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getMANY, readonly) BOOL MANY; 144*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=getSome, readonly) BOOL some; 145*67e74705SXin Li@end 146*67e74705SXin Li 147*67e74705SXin LiDEPRECATED 148*67e74705SXin Li@interface I_DEP 149*67e74705SXin Li- (BOOL) isinValid; 150*67e74705SXin Li- (void) setInValid : (BOOL) arg; 151*67e74705SXin Li@end 152*67e74705SXin Li 153*67e74705SXin Li@interface AnotherOne 154*67e74705SXin Li- (BOOL) isinValid DEPRECATED; 155*67e74705SXin Li- (void) setInValid : (BOOL) arg; 156*67e74705SXin Li- (id)MYtarget; 157*67e74705SXin Li- (void)setMYtarget: (id)target DEPRECATED; 158*67e74705SXin Li- (BOOL) getM DEPRECATED; 159*67e74705SXin Li 160*67e74705SXin Li- (id)xxxdelegateYYY DEPRECATED; 161*67e74705SXin Li- (void)setXxxdelegateYYY:(id)delegate DEPRECATED; 162*67e74705SXin Li@end 163*67e74705SXin Li 164*67e74705SXin Li// rdar://14987909 165*67e74705SXin Li#define NS_AVAILABLE __attribute__((availability(macosx,introduced=10.0))) 166*67e74705SXin Li#define NORETURN __attribute__((noreturn)) 167*67e74705SXin Li#define ALIGNED __attribute__((aligned(16))) 168*67e74705SXin Li 169*67e74705SXin Li@interface NSURL 170*67e74705SXin Li// Do not infer a property. 171*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSURL *appStoreReceiptURL NS_AVAILABLE; 172*67e74705SXin Li- (void) setAppStoreReceiptURL : (NSURL *)object; 173*67e74705SXin Li 174*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSURL *appStoreReceiptURLX NS_AVAILABLE; 175*67e74705SXin Li 176*67e74705SXin Li// Do not infer a property. 177*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSURL *appStoreReceiptURLY ; 178*67e74705SXin Li- (void) setAppStoreReceiptURLY : (NSURL *)object NS_AVAILABLE; 179*67e74705SXin Li 180*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, readonly, strong) id OkToInfer NS_AVAILABLE; 181*67e74705SXin Li 182*67e74705SXin Li// Do not infer a property. 183*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) NSURL *appStoreReceiptURLZ ; 184*67e74705SXin Li- (void) setAppStoreReceiptURLZ : (NSURL *)object NS_AVAILABLE; 185*67e74705SXin Li 186*67e74705SXin Li// Do not infer a property. 187*67e74705SXin Li- (id) t1 NORETURN NS_AVAILABLE; 188*67e74705SXin Li- (void) setT1 : (id) arg NS_AVAILABLE; 189*67e74705SXin Li 190*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, strong) id method1 ALIGNED NS_AVAILABLE; 191*67e74705SXin Li 192*67e74705SXin Li- (NSURL *)init; // No Change 193*67e74705SXin Li+ (id)alloc; // No Change 194*67e74705SXin Li 195*67e74705SXin Li- (BOOL)is1stClass; // Not a valid property 196*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, getter=isClass, readonly) BOOL class; // This is a valid property 'class' is not a keyword in ObjC 197*67e74705SXin Li- (BOOL)isDouble; // Not a valid property 198*67e74705SXin Li 199*67e74705SXin Li@end 200*67e74705SXin Li 201*67e74705SXin Li// rdar://15082818 202*67e74705SXin Li@class NSMutableDictionary; 203*67e74705SXin Li 204*67e74705SXin Li@interface NSArray 205*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, readonly, copy) id (^expressionBlock)(id, NSArray *, NSMutableDictionary *); 206*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, copy) id (^MyBlock)(id, NSArray *, NSMutableDictionary *); 207*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY, readonly) id (*expressionFuncptr)(id, NSArray *, NSMutableDictionary *); 208*67e74705SXin Li@property (NS_NONATOMIC_IOSONLY) id (*MyFuncptr)(id, NSArray *, NSMutableDictionary *); 209*67e74705SXin Li@end 210