Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 @interface Sprite { // expected-note{{'Sprite' declared here}}
      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 {{unknown type name 'Xsprite'; did you mean 'Sprite'?}}  \
     21   // expected-error{{expected identifier or '('}}
     22   UseGlobalBar = 10;
     23 }
     24 + (void)setSprite:(int)sprite {
     25   int spree;
     26   sprite = 15;
     27   spree = 17;
     28   ((Sprite *)self)->sprite = 16;   /* NB: This is how one _should_ access */
     29   ((Sprite *)self)->spree = 18;    /* ivars from within class methods!    */
     30 }
     31 - (void)setFoo:(int)foo {
     32   sprite = foo;
     33   spree = foo;
     34 }
     35 - (void)setSprite:(int)sprite {
     36   int spree;
     37   sprite = 15;  // expected-warning {{local declaration of 'sprite' hides instance variable}}
     38   self->sprite = 16;
     39   spree = 17;  // expected-warning {{local declaration of 'spree' hides instance variable}}
     40   self->spree = 18;
     41 }   
     42 @end
     43