Require target lra in gcc.dg/pr108095.c
[official-gcc.git] / gcc / testsuite / objc.dg / foreach-1.m
blobb8df5879dae1d8b191f2ae393d82eaa720d15178
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" } */
9 #include "../objc-obj-c++-shared/TestsuiteObject.m"
11 extern void abort (void);
13 struct __objcFastEnumerationState
15   unsigned long state;
16   id            *itemsPtr;
17   unsigned long *mutationsPtr;
18   unsigned long extra[5];
21 @interface TestsuiteObject (NSFastEnumeration)
22 - (unsigned long)countByEnumeratingWithState: (struct __objcFastEnumerationState *)state
23                                      objects:(id *)stackbuf 
24                                        count:(unsigned int)len;
25 @end
27 int main (void)
29   int test_variable = 0;
30   int counter = 0;
31   id array = nil;
32   id object = nil;
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;
39   if (test_variable == 8)
40     abort ();
42   if (object != nil)
43     abort ();
45   /* Test that if nothing is done, object is set to nil.  */
46   object = [TestsuiteObject new];
48   for (object in array)
49     ;
51   if (object != nil)
52     abort ();
54   /* Test that you can reference 'object' inside the body.  */
55   for (object in array)
56     object = nil;
58   if (object != nil)
59     abort ();
61   /* Test that 'for (id element in array) is recognized (and works).  */
62   for (id element in array)
63     test_variable = 8;
65   if (test_variable == 8)
66     abort ();
68   /* Test that you can reference 'object' inside the body.  */
69   for (id element in array)
70     element = nil;
72   /* Test that C for loops still work.  */
73   test_variable = 0;
75   for (counter = 0; counter < 4; counter++)
76     test_variable++;
78   if (test_variable != 4)
79     abort ();
81   return 0;