[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaObjC / mrc-no-weak.m
blobfcb17440641f26911839a0550a2d9c259eeca69e
1 // RUN: %clang_cc1 -fobjc-runtime=macosx-10.8 -fsyntax-only -verify %s
3 __attribute__((objc_root_class))
4 @interface Root @end
6 // These should not get diagnosed immediately.
7 @interface A : Root {
8   __weak id x;
10 @property __weak id y;
11 @end
13 // Diagnostic goes on the ivar if it's explicit.
14 @interface B : Root {
15   __weak id x;  // expected-error {{cannot create __weak reference in file using manual reference counting}}
17 @property __weak id x;
18 @end
19 @implementation B
20 @synthesize x;
21 @end
23 // Otherwise, it goes with the @synthesize.
24 @interface C : Root
25 @property __weak id x; // expected-note {{property declared here}}
26 @end
27 @implementation C
28 @synthesize x; // expected-error {{cannot synthesize weak property in file using manual reference counting}}
29 @end
31 @interface D : Root
32 @property __weak id x; // expected-note {{property declared here}}
33 @end
34 @implementation D // expected-error {{cannot synthesize weak property in file using manual reference counting}}
35 @end
37 @interface E : Root {
38 @public
39   __weak id x; // expected-note 2 {{declaration uses __weak, but ARC is disabled}}
41 @end
43 void testE(E *e) {
44   id x = e->x; // expected-error {{'x' is unavailable}}
45   e->x = x; // expected-error {{'x' is unavailable}}
48 @interface F : Root
49 @property (weak) id x;
50 @end
52 void testF(F *f) {
53   id x = f.x;