OSDN Git Service

Backported from mainline
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / objc.dg / foreach-1.m
1 /* Test basic Objective-C foreach syntax.  This tests iterations that
2    do nothing.
3 */
4 /* { dg-do run } */
5 /* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
6 /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
7 /* { dg-options "-Wall" } */
8
9 #include "../objc-obj-c++-shared/TestsuiteObject.m"
10
11 extern void abort (void);
12 /*
13 struct __objcFastEnumerationState
14 {
15   unsigned long state;
16   id            *itemsPtr;
17   unsigned long *mutationsPtr;
18   unsigned long extra[5];
19 };
20 */
21 @interface TestsuiteObject (NSFastEnumeration)
22 - (unsigned long)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state
23                                      objects:(id *)stackbuf 
24                                        count:(unsigned int)len;
25 @end
26
27 int main (void)
28 {
29   int test_variable = 0;
30   int counter = 0;
31   id array = nil;
32   id object = nil;
33
34   /* Test that 'for (object in array)' is recognized and that nothing
35      happens if array is nil.  */
36   for (object in array)
37     test_variable = 8;
38
39   if (test_variable == 8)
40     abort ();
41
42   if (object != nil)
43     abort ();
44
45   /* Test that if nothing is done, object is set to nil.  */
46   object = [TestsuiteObject new];
47
48   for (object in array)
49     ;
50
51   if (object != nil)
52     abort ();
53
54   /* Test that you can reference 'object' inside the body.  */
55   for (object in array)
56     object = nil;
57
58   if (object != nil)
59     abort ();
60
61   /* Test that 'for (id element in array) is recognized (and works).  */
62   for (id element in array)
63     test_variable = 8;
64
65   if (test_variable == 8)
66     abort ();
67
68   /* Test that you can reference 'object' inside the body.  */
69   for (id element in array)
70     element = nil;
71
72   /* Test that C for loops still work.  */
73   test_variable = 0;
74
75   for (counter = 0; counter < 4; counter++)
76     test_variable++;
77
78   if (test_variable != 4)
79     abort ();
80
81   return 0;
82 }