1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2*67e74705SXin Li 3*67e74705SXin Li@interface Sprite { 4*67e74705SXin Li int sprite, spree; 5*67e74705SXin Li int UseGlobalBar; 6*67e74705SXin Li} 7*67e74705SXin Li+ (void)setFoo:(int)foo; 8*67e74705SXin Li+ (void)setSprite:(int)sprite; 9*67e74705SXin Li- (void)setFoo:(int)foo; 10*67e74705SXin Li- (void)setSprite:(int)sprite; 11*67e74705SXin Li@end 12*67e74705SXin Li 13*67e74705SXin Liint spree = 23; 14*67e74705SXin Liint UseGlobalBar; 15*67e74705SXin Li 16*67e74705SXin Li@implementation Sprite 17*67e74705SXin Li+ (void)setFoo:(int)foo { 18*67e74705SXin Li sprite = foo; // expected-error {{instance variable 'sprite' accessed in class method}} 19*67e74705SXin Li spree = foo; 20*67e74705SXin Li Xsprite = foo; // expected-error {{use of undeclared identifier 'Xsprite'}} 21*67e74705SXin Li UseGlobalBar = 10; 22*67e74705SXin Li} 23*67e74705SXin Li+ (void)setSprite:(int)sprite { 24*67e74705SXin Li int spree; 25*67e74705SXin Li sprite = 15; 26*67e74705SXin Li spree = 17; 27*67e74705SXin Li ((Sprite *)self)->sprite = 16; /* NB: This is how one _should_ access */ 28*67e74705SXin Li ((Sprite *)self)->spree = 18; /* ivars from within class methods! */ 29*67e74705SXin Li} 30*67e74705SXin Li- (void)setFoo:(int)foo { 31*67e74705SXin Li sprite = foo; 32*67e74705SXin Li spree = foo; 33*67e74705SXin Li} 34*67e74705SXin Li- (void)setSprite:(int)sprite { 35*67e74705SXin Li int spree; 36*67e74705SXin Li sprite = 15; // expected-warning {{local declaration of 'sprite' hides instance variable}} 37*67e74705SXin Li self->sprite = 16; 38*67e74705SXin Li spree = 17; // expected-warning {{local declaration of 'spree' hides instance variable}} 39*67e74705SXin Li self->spree = 18; 40*67e74705SXin Li} 41*67e74705SXin Li@end 42