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