[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaObjC / ivar-ref-misuse.m
blob2c2fb2f4618f1a79063042423ebeb58d62491867
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
3 @interface Sprite {
4   int sprite, spree;
5   int UseGlobalBar;
7 + (void)setFoo:(int)foo;
8 + (void)setSprite:(int)sprite;
9 - (void)setFoo:(int)foo;
10 - (void)setSprite:(int)sprite;
11 @end
13 int spree = 23;
14 int UseGlobalBar;
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;
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!    */
30 - (void)setFoo:(int)foo {
31   sprite = foo;
32   spree = foo;
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