Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
      2 
      3 @interface Sprite {
      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 {{use of undeclared identifier 'Xsprite'}}
     21   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
     42