OSDN Git Service

In gcc/testsuite/:
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / obj-c++.dg / private-2.mm
1 /* Test warnings for shadowing instance variables.  */
2 /* Based on work by: Nicola Pero <nicola@brainstorm.co.uk>.  */
3
4 /* { dg-do compile } */
5
6 #include <objc/objc.h>
7
8 @interface MySuperClass
9 {
10 @private
11   int _private;
12
13 @protected
14   int _protected;
15
16 @public
17   int _public;
18 }
19 - (void) test;
20 @end
21
22 @implementation MySuperClass
23 - (void) test
24 {
25   /* FIXME: I wonder if the warnings shouldn't be better generated
26      when the variable is declared, rather than used!  */
27   int _private = 12;
28   int _protected = 12;
29   int _public = 12;
30   int a;
31   
32   a = _private;    /* { dg-warning "hides instance variable" } */
33   a = _protected;  /* { dg-warning "hides instance variable" } */
34   a = _public;     /* { dg-warning "hides instance variable" } */
35 }
36 @end
37
38
39 @interface MyClass : MySuperClass 
40 @end
41
42 @implementation MyClass
43 - (void) test
44 {
45   int _private = 12;
46   int _protected = 12;
47   int _public = 12;
48   int a;
49
50   /* The private variable can be shadowed without warnings, because
51    * it's invisible, and not accessible, to the subclass!  */
52   a = _private;   /* Ok  */
53   a = _protected; /* { dg-warning "hides instance variable" } */
54   a = _public;    /* { dg-warning "hides instance variable" } */
55 }
56 @end