blob: fcb17440641f26911839a0550a2d9c259eeca69e [file] [log] [blame]
John McCallb61e14e2015-10-27 04:54:50 +00001// RUN: %clang_cc1 -fobjc-runtime=macosx-10.8 -fsyntax-only -verify %s
2
3__attribute__((objc_root_class))
4@interface Root @end
5
6// These should not get diagnosed immediately.
7@interface A : Root {
8 __weak id x;
9}
10@property __weak id y;
11@end
12
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}}
16}
17@property __weak id x;
18@end
19@implementation B
20@synthesize x;
21@end
22
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
30
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
36
37@interface E : Root {
38@public
John McCallc6af8c62015-10-28 05:03:19 +000039 __weak id x; // expected-note 2 {{declaration uses __weak, but ARC is disabled}}
John McCallb61e14e2015-10-27 04:54:50 +000040}
41@end
42
43void testE(E *e) {
John McCallc6af8c62015-10-28 05:03:19 +000044 id x = e->x; // expected-error {{'x' is unavailable}}
45 e->x = x; // expected-error {{'x' is unavailable}}
John McCallb61e14e2015-10-27 04:54:50 +000046}
47
48@interface F : Root
49@property (weak) id x;
50@end
51
52void testF(F *f) {
53 id x = f.x;
54}