Home | History | Annotate | Download | only in SemaObjC
      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 
     47 void abort(void);
     48 int 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