blob: 2c2fb2f4618f1a79063042423ebeb58d62491867 [file] [log] [blame]
Patrick Beardacfbe9e2012-04-06 18:12:22 +00001// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
Fariborz Jahanianbf8e8422009-03-02 21:55:29 +00002
Kaelyn Uhrain46b6cdc2013-09-27 19:40:16 +00003@interface Sprite {
Fariborz Jahanianbf8e8422009-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 McCalld14a8642009-11-21 08:51:07 +000018 sprite = foo; // expected-error {{instance variable 'sprite' accessed in class method}}
Fariborz Jahanianbf8e8422009-03-02 21:55:29 +000019 spree = foo;
Kaelyn Uhrain46b6cdc2013-09-27 19:40:16 +000020 Xsprite = foo; // expected-error {{use of undeclared identifier 'Xsprite'}}
Fariborz Jahanianbf8e8422009-03-02 21:55:29 +000021 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