Merge from mainline (165734:167278).
[official-gcc/graphite-test-results.git] / gcc / testsuite / objc.dg / property / dotsyntax-16.m
blob893db69d9807591bfb7b8a32f4fb91c95495102b
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 dot-syntax with pre/post increment and decrement.  */
7 #include <stdlib.h>
8 #include <objc/objc.h>
9 #include <objc/runtime.h>
11 @interface MyRootClass
13   Class isa;
14   int a;
16 + (id) initialize;
17 + (id) alloc;
18 - (id) init;
19 - (int) count;
20 - (void) setCount: (int)count;
21 @end
23 @implementation MyRootClass
24 + (id) initialize { return self; }
25 + (id) alloc { return class_createInstance (self, 0); }
26 - (id) init { return self; }
27 - (int) count
29   return a;
31 - (void) setCount: (int)count
33   a = count;
35 @end
37 int main (void)
39   MyRootClass *object = [[MyRootClass alloc] init];
41   object.count = 10;
42   if (object.count != 10)
43     abort ();
45   /* First, test that they increment/decrement as expected.  */
46   object.count++;
47   if (object.count != 11)
48     abort ();
50   ++object.count;
51   if (object.count != 12)
52     abort ();
54   object.count--;
55   if (object.count != 11)
56     abort ();
58   --object.count;
59   if (object.count != 10)
60     abort ();
62   /* Now, test that they are pre/post increment/decrement, as
63      expected.  */
64   if (object.count++ != 10)
65     abort ();
67   if (object.count != 11)
68     abort ();
70   if (++object.count != 12)
71     abort ();
73   if (object.count != 12)
74     abort ();
76   if (object.count-- != 12)
77     abort ();
79   if (object.count != 11)
80     abort ();
82   if (--object.count != 10)
83     abort ();
85   if (object.count != 10)
86     abort ();
88   return 0;