Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/objc.dg/local-decl-2.m @ 144:8f4e72ab4e11
fix segmentation fault caused by nothing next cur_op to end
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 23 Dec 2018 21:23:56 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* 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-obj-c++-shared/TestsuiteObject.h" @interface Sprite: TestsuiteObject { 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