[gcc]
[official-gcc.git] / gcc / testsuite / obj-c++.dg / property / at-property-22.mm
blob03b3d0bb48e2ba06c8610d45c742c36b0c33611f
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 properties of different types.  */
7 #include <stdlib.h>
8 #include <objc/objc.h>
9 #include <objc/runtime.h>
11 enum colour { Red, Black };
13 @interface MyRootClass
15   Class isa;
17 + (id) initialize;
18 + (id) alloc;
19 - (id) init;
20 + (Class) class;
21 @end
23 @implementation MyRootClass
24 + (id) initialize { return self; }
25 + (id) alloc { return class_createInstance (self, 0); }
26 - (id) init { return self; }
27 + (Class) class { return self; }
28 @end
31 @interface MyClass : MyRootClass
33   /* A bunch of C types.  */
34   char         pchar;
35   short        pshort;
36   int          pint;
37   long         plong;
38   float        pfloat;
39   double       pdouble;
40   enum colour  penum;
42   /* A bunch of pointers to C types.  */
43   char        *pcharp;
44   short       *pshortp;
45   int         *pintp;
46   long        *plongp;
47   float       *pfloatp;
48   double      *pdoublep;
49   enum colour *penump;
51   /* A bunch of Objective-C types.  */
52   id           pid;
53   Class        pclass;
54   MyClass     *pMyClassp;
56 @property (assign) char pchar;
57 @property (assign) short pshort;
58 @property (assign) int pint;
59 @property (assign) long plong;
60 @property (assign) float pfloat;
61 @property (assign) double pdouble;
62 @property (assign) enum colour penum;
64 @property (assign) char *pcharp;
65 @property (assign) short *pshortp;
66 @property (assign) int *pintp;
67 @property (assign) long *plongp;
68 @property (assign) float *pfloatp;
69 @property (assign) double *pdoublep;
70 @property (assign) enum colour *penump;
72 @property (assign) id pid;
73 @property (assign) Class pclass;
74 @property (assign) MyClass *pMyClassp;
75 @end
77 @implementation MyClass
78 @synthesize pchar;
79 @synthesize pshort;
80 @synthesize pint;
81 @synthesize plong;
82 @synthesize pfloat;
83 @synthesize pdouble;
84 @synthesize penum;
86 @synthesize pcharp;
87 @synthesize pshortp;
88 @synthesize pintp;
89 @synthesize plongp;
90 @synthesize pfloatp;
91 @synthesize pdoublep;
92 @synthesize penump;
94 @synthesize pid;
95 @synthesize pclass;
96 @synthesize pMyClassp;
97 @end
99 int main (void)
101   MyClass *object = [[MyClass alloc] init];
103   object.pchar = 1;
104   if (object.pchar != 1)
105     abort ();
107   object.pshort = 2;
108   if (object.pshort != 2)
109     abort ();
111   object.pint = 3;
112   if (object.pint != 3)
113     abort ();
115   object.plong = 4;
116   if (object.plong != 4)
117     abort ();
119   object.pfloat = 0;
120   if (object.pfloat != 0)
121     abort ();
123   object.pdouble = 0;
124   if (object.pdouble != 0)
125     abort ();
127   object.penum = Black;
128   if (object.penum != Black)
129     abort ();
131   object.pcharp = (char *)0;
132   if (object.pcharp != 0)
133     abort ();
134   
135   object.pshortp = (short *)0;
136   if (object.pshortp != 0)
137     abort ();
139   object.pintp = (int *)0;
140   if (object.pintp != 0)
141     abort ();
142     
143   object.plongp = (long *)0;
144   if (object.plongp != 0)
145     abort ();
146     
147   object.pfloatp = (float *)0;
148   if (object.pfloatp != 0)
149     abort ();
150     
151   object.pdoublep = (double *)0;
152   if (object.pdoublep != 0)
153     abort ();
154     
155   object.penump = (enum colour *)0;
156   if (object.penump != 0)
157     abort ();
159   object.pid = object;
160   if (object.pid != object)
161     abort ();
163   object.pclass = [MyClass class];
164   if (object.pclass != [MyClass class])
165     abort ();
167   object.pMyClassp = object;
168   if (object.pMyClassp != object)
169     abort ();
171   return 0;