blob: 3115f5bd23322deb82316a80bcbb88cc9d8d88de [file] [log] [blame]
Patrick Beardb2f68202012-04-06 18:12:22 +00001// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
Fariborz Jahanian077c1e72009-03-02 21:55:29 +00002
Douglas Gregord8bba9c2011-06-28 16:20:02 +00003@interface Sprite { // expected-note{{'Sprite' declared here}}
Fariborz Jahanian077c1e72009-03-02 21:55:29 +00004 int sprite, spree;
5 int UseGlobalBar;
6}
7+ (void)setFoo:(int)foo;
8+ (void)setSprite:(int)sprite;
9- (void)setFoo:(int)foo;
10- (void)setSprite:(int)sprite;
11@end
12
13int spree = 23;
14int UseGlobalBar;
15
16@implementation Sprite
17+ (void)setFoo:(int)foo {
John McCallba135432009-11-21 08:51:07 +000018 sprite = foo; // expected-error {{instance variable 'sprite' accessed in class method}}
Fariborz Jahanian077c1e72009-03-02 21:55:29 +000019 spree = foo;
Douglas Gregord8bba9c2011-06-28 16:20:02 +000020 Xsprite = foo; // expected-error {{unknown type name 'Xsprite'; did you mean 'Sprite'?}} \
21 // expected-error{{expected identifier or '('}}
Fariborz Jahanian077c1e72009-03-02 21:55:29 +000022 UseGlobalBar = 10;
23}
24+ (void)setSprite:(int)sprite {
25 int spree;
26 sprite = 15;
27 spree = 17;
28 ((Sprite *)self)->sprite = 16; /* NB: This is how one _should_ access */
29 ((Sprite *)self)->spree = 18; /* ivars from within class methods! */
30}
31- (void)setFoo:(int)foo {
32 sprite = foo;
33 spree = foo;
34}
35- (void)setSprite:(int)sprite {
36 int spree;
37 sprite = 15; // expected-warning {{local declaration of 'sprite' hides instance variable}}
38 self->sprite = 16;
39 spree = 17; // expected-warning {{local declaration of 'spree' hides instance variable}}
40 self->spree = 18;
41}
42@end