2014-01-30 Alangi Derick <alangiderick@gmail.com>
[official-gcc.git] / gcc / testsuite / obj-c++.dg / property / dotsyntax-9.mm
blob61a5c0eb8c6d488da72219f369cef0bc1f807bc8
1 /* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010.  */
2 /* { dg-do run } */
3 /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
5 /* Test that setter/getters for dot-syntax are properly found even if
6    not declared in the @interface, but available in the local
7    @implementation before the current line (ie, [object name] can be
8    compiled in that case, so object.name should be compiled too).  */
10 #include <stdlib.h>
11 #include <objc/objc.h>
12 #include <objc/runtime.h>
14 static int c;
16 @interface MyRootClass
18   Class isa;
19   int a;
21 + (id) initialize;
22 + (id) alloc;
23 - (id) init;
24 @end
26 @implementation MyRootClass
27 + (id) initialize { return self; }
28 + (id) alloc { return class_createInstance (self, 0); }
29 - (id) init { return self; }
30 - (int) count
32   return a;
34 - (void) setCount: (int)count
36   a = count;
38 + (int) classCount
40   return c;
42 + (void) setClassCount: (int)count
44   c = count;
46 - (int) testMe
48   self.count = 400;
49   if (self.count != 400)
50     abort ();
52   return self.count;
54 + (int) testMe
56   self.classCount = 4000;
57   if (self.classCount != 4000)
58     abort ();
60   return self.classCount;
62 @end
64 int main (void)
66   MyRootClass *object = [[MyRootClass alloc] init];
68   if ([object testMe] != 400)
69     abort ();
71   if ([MyRootClass testMe] != 4000)
72     abort ();
74   return 0;