1// RUN: %clang_cc1 -fsyntax-only -verify %s -Wno-unreachable-code 2 3@interface NSObject 4+ alloc; 5- init; 6@end 7 8@protocol Test 9 @property int required; 10 11@optional 12 @property int optional; 13 @property int optional1; 14 @property int optional_preexisting_setter_getter; 15 @property (setter = setOptional_preexisting_setter_getter: , 16 getter = optional_preexisting_setter_getter) int optional_with_setter_getter_attr; 17@required 18 @property int required1; 19@optional 20 @property int optional_to_be_defined; 21 @property (readonly, getter = optional_preexisting_setter_getter) int optional_getter_attr; 22@end 23 24@interface Test : NSObject <Test> { 25 int ivar; 26 int ivar1; 27 int ivar2; 28} 29@property int required; 30@property int optional_to_be_defined; 31- (int) optional_preexisting_setter_getter; 32- (void) setOptional_preexisting_setter_getter:(int)value; 33@end 34 35@implementation Test 36@synthesize required = ivar; 37@synthesize required1 = ivar1; 38@synthesize optional_to_be_defined = ivar2; 39- (int) optional_preexisting_setter_getter { return ivar; } 40- (void) setOptional_preexisting_setter_getter:(int)value 41 { 42 ivar = value; 43 } 44- (void) setOptional_getter_attr:(int)value { ivar = value; } 45@end 46 47void abort(void); 48int main () 49{ 50 Test *x = [[Test alloc] init]; 51 /* 1. Test of a required property */ 52 x.required1 = 100; 53 if (x.required1 != 100) 54 abort (); 55 56 /* 2. Test of a synthesize optional property */ 57 x.optional_to_be_defined = 123; 58 if (x.optional_to_be_defined != 123) 59 abort (); 60 61 /* 3. Test of optional property with pre-sxisting defined setter/getter */ 62 x.optional_preexisting_setter_getter = 200; 63 if (x.optional_preexisting_setter_getter != 200) 64 abort (); 65 66 /* 4. Test of optional property with setter/getter attribute */ 67 if (x.optional_with_setter_getter_attr != 200) 68 abort (); 69 return 0; 70 71 /* 5. Test of optional property with getter attribute and default setter method. */ 72 x.optional_getter_attr = 1000; 73 if (x.optional_getter_attr != 1000) 74 abort (); 75 76 return 0; 77} 78 79