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