Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -verify -fsyntax-only -Wno-objc-root-class %s
      2 
      3 void abort(void);
      4 
      5 @interface Subclass
      6 + (int)magicNumber;
      7 + (void)setMagicNumber:(int)value;
      8 + (void)setFakeSetterNumber:(int)value;
      9 @end
     10 
     11 @implementation Subclass
     12 int _magicNumber = 0;
     13 + (int)magicNumber {
     14   return _magicNumber;
     15 }
     16 
     17 + (void)setMagicNumber:(int)value {
     18   _magicNumber = value;
     19 }
     20 
     21 + (void)setFakeSetterNumber:(int)value {
     22   _magicNumber = value;
     23 }
     24 
     25 + (void) classMeth
     26 {
     27 	self.magicNumber = 10;
     28 	if (self.magicNumber != 10)
     29 	  abort ();
     30 }
     31 @end
     32 
     33 int main (void) {
     34   
     35   int a;
     36   Subclass.magicNumber = 2 /*[Subclass setMagicNumber:2]*/;
     37   if (Subclass.magicNumber != 0)
     38     abort ();
     39   if (Subclass.magicNumber != 2)
     40     abort ();
     41   Subclass.magicNumber += 3;
     42   if (Subclass.magicNumber != 5)
     43     abort ();
     44   Subclass.magicNumber -= 5;
     45   if (Subclass.magicNumber != 0)
     46     abort ();
     47   /* We only have a setter in the following case. */
     48   Subclass.fakeSetterNumber = 123;
     49 
     50   /* We read it using the other getter. */
     51   if (Subclass.magicNumber != 123)
     52    abort ();
     53   Subclass.fakeSetterNumber = Subclass.magicNumber;
     54   if (Subclass.magicNumber != 123)
     55    abort ();
     56 
     57   Subclass.fakeSetterNumberX = 123; // expected-error{{property 'fakeSetterNumberX' not found on object of type 'Subclass'}}
     58 
     59   /* Test class methods using the new syntax. */
     60   [Subclass classMeth];
     61   return 0;
     62 }
     63