/* Test warnings for shadowing instance variables. */ /* Author: Nicola Pero . */ /* { dg-do compile } */ #include @interface MySuperClass { @private int private; @protected int protected; @public int public; } - (void) test; @end @implementation MySuperClass - (void) test { /* FIXME: I wonder if the warnings shouldn't be better generated when the variable is declared, rather than used! */ int private = 12; int protected = 12; int public = 12; int a; a = private; /* { dg-warning "hides instance variable" } */ a = protected; /* { dg-warning "hides instance variable" } */ a = public; /* { dg-warning "hides instance variable" } */ } @end @interface MyClass : MySuperClass @end @implementation MyClass - (void) test { int private = 12; int protected = 12; int public = 12; int a; /* The private variable can be shadowed without warnings, because * it's invisible, and not accessible, to the subclass! */ a = private; /* Ok */ a = protected; /* { dg-warning "hides instance variable" } */ a = public; /* { dg-warning "hides instance variable" } */ } @end