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