invoke.texi: Document new switches -Wno-shadow-ivar, -fno-local-ivars and -fivar...
[gcc.git] / gcc / testsuite / objc.dg / ivar-scope-4.m
1 /* Test instance variable scope. */
2 /* Author: Dimitris Papavasiliou <dpapavas@gmail.com>. */
3 /* { dg-do run } */
4 /* { dg-additional-options "-Wno-shadow-ivar -fno-local-ivars" } */
5 #include "../objc-obj-c++-shared/runtime.h"
6 #include <objc/objc.h>
7
8 extern void abort(void);
9
10 int someivar = 1;
11
12 /* The testsuite object depends on local variable scope so we need to
13 implement our own minimal base object here. */
14
15 @interface MyClass
16 {
17 Class isa;
18 int someivar;
19 }
20
21 + (id) alloc;
22 - (id) init;
23 - (int) getGlobal;
24 - (int) getInstance;
25 - (int) getHidden;
26 @end
27
28 @implementation MyClass
29 + (id) alloc
30 {
31 return class_createInstance (self, 0);
32 }
33
34 - (id) init
35 {
36 self->someivar = 2;
37
38 return self;
39 }
40
41 - (int) getGlobal
42 {
43 return someivar;
44 }
45
46 - (int) getInstance
47 {
48 return self->someivar;
49 }
50
51 - (int) getHidden
52 {
53 int someivar = 3;
54
55 return someivar;
56 }
57 @end
58
59 int main(void)
60 {
61 id object;
62
63 object = [[MyClass alloc] init];
64
65 /* Check for aliasing between instance variable and global
66 variable. */
67
68 if ([object getGlobal] != 1) {
69 abort();
70 }
71
72 if ([object getInstance] != 2) {
73 abort();
74 }
75
76 /* Check whether the local variable hides the instance variable. */
77
78 if ([object getHidden] != 3) {
79 abort();
80 }
81
82 return 0;
83 }