blob: 5ee53fb063cd0f0fac2d5e2090e11efb2c86e214 [file] [log] [blame]
Fariborz Jahanian878f8502012-04-04 20:05:25 +00001// RUN: %clang_cc1 -fsyntax-only -fobjc-runtime-has-weak -fobjc-arc -fblocks -Wreceiver-is-weak -verify %s
2// rdar://10225276
3
4@interface Test0
5- (void) setBlock: (void(^)(void)) block;
6- (void) addBlock: (void(^)(void)) block;
7- (void) actNow;
8@end
9
10void test0(Test0 *x) {
11 __weak Test0 *weakx = x;
12 [x addBlock: ^{ [weakx actNow]; }]; // expected-warning {{weak receiver may be unpredictably null in ARC mode}}
13 [x setBlock: ^{ [weakx actNow]; }]; // expected-warning {{weak receiver may be unpredictably null in ARC mode}}
14 x.block = ^{ [weakx actNow]; }; // expected-warning {{weak receiver may be unpredictably null in ARC mode}}
15
16 [weakx addBlock: ^{ [x actNow]; }]; // expected-warning {{weak receiver may be unpredictably null in ARC mode}}
17 [weakx setBlock: ^{ [x actNow]; }]; // expected-warning {{weak receiver may be unpredictably null in ARC mode}}
18 weakx.block = ^{ [x actNow]; };
19}
Fariborz Jahanian289677d2012-04-19 21:44:57 +000020
21@interface Test
22{
23 __weak Test* weak_prop;
24}
25- (void) Meth;
26@property __weak Test* weak_prop; // expected-note 2 {{property declared here}}
27@property (weak, atomic) id weak_atomic_prop; // expected-note 2 {{property declared here}}
28- (__weak id) P; // expected-note 2 {{method 'P' declared here}}
29@end
30
31@implementation Test
32- (void) Meth {
33 if (self.weak_prop) { // expected-warning {{weak property may be unpredictably null in ARC mode}}
34 self.weak_prop = 0;
35 }
36 if (self.weak_atomic_prop) { // expected-warning {{weak property may be unpredictably null in ARC mode}}
37 self.weak_atomic_prop = 0;
38 }
39 [self.weak_prop Meth]; // expected-warning {{weak property may be unpredictably null in ARC mode}}
40 id pi = self.P; // expected-warning {{weak implicit property may be unpredictably null in ARC mode}}
41
42 [self.weak_atomic_prop Meth]; // expected-warning {{weak property may be unpredictably null in ARC mode}}
43
44 [self.P Meth]; // expected-warning {{weak implicit property may be unpredictably null in ARC mode}}
45}
46
47- (__weak id) P { return 0; }
48@dynamic weak_prop, weak_atomic_prop;
49@end
50