YouCompleteMe/cpp/llvm/tools/clang/test/SemaObjC/ivar-ref-misuse.m
Strahinja Val Markovic 1f51a89d39 Adding more llvm/clang files
These were ignored by git accidentally. We want ALL OF THEM since they all came
in the llvm/clang source distribution.
2012-07-05 17:55:45 -07:00

43 lines
1.2 KiB
Objective-C

// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
@interface Sprite { // expected-note{{'Sprite' declared here}}
int sprite, spree;
int UseGlobalBar;
}
+ (void)setFoo:(int)foo;
+ (void)setSprite:(int)sprite;
- (void)setFoo:(int)foo;
- (void)setSprite:(int)sprite;
@end
int spree = 23;
int UseGlobalBar;
@implementation Sprite
+ (void)setFoo:(int)foo {
sprite = foo; // expected-error {{instance variable 'sprite' accessed in class method}}
spree = foo;
Xsprite = foo; // expected-error {{unknown type name 'Xsprite'; did you mean 'Sprite'?}} \
// expected-error{{expected identifier or '('}}
UseGlobalBar = 10;
}
+ (void)setSprite:(int)sprite {
int spree;
sprite = 15;
spree = 17;
((Sprite *)self)->sprite = 16; /* NB: This is how one _should_ access */
((Sprite *)self)->spree = 18; /* ivars from within class methods! */
}
- (void)setFoo:(int)foo {
sprite = foo;
spree = foo;
}
- (void)setSprite:(int)sprite {
int spree;
sprite = 15; // expected-warning {{local declaration of 'sprite' hides instance variable}}
self->sprite = 16;
spree = 17; // expected-warning {{local declaration of 'spree' hides instance variable}}
self->spree = 18;
}
@end