]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaObjC/ivar-ref-misuse.m
Vendor import of clang trunk r135360:
[FreeBSD/FreeBSD.git] / test / SemaObjC / ivar-ref-misuse.m
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