URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [testsuite/] [objc.dg/] [local-decl-2.m] - Rev 154
Compare with Previous | Blame | View Log
/* Test for ivar access inside of class methods. It should be allowed (with a warning), but only if no other declarations with the same name are seen. */ /* Author: Ziemowit Laski <zlaski@apple.com>. */ /* { dg-do compile } */ #include <objc/Object.h> @interface Sprite: Object { int sprite, spree; } + (void)setFoo:(int)foo; + (void)setSprite:(int)sprite; - (void)setFoo:(int)foo; - (void)setSprite:(int)sprite; @end int spree = 23; @implementation Sprite + (void)setFoo:(int)foo { sprite = foo; /* { dg-warning "instance variable .sprite. accessed in class method" } */ spree = foo; } + (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; /* { dg-warning "local declaration of .sprite. hides instance variable" } */ self->sprite = 16; spree = 17; /* { dg-warning "local declaration of .spree. hides instance variable" } */ self->spree = 18; } @end