]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaObjC/arc-property-decl-attrs.m
Vendor import of clang trunk r256633:
[FreeBSD/FreeBSD.git] / test / SemaObjC / arc-property-decl-attrs.m
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fsyntax-only -fobjc-arc -verify %s
2 // rdar://9340606
3
4 @interface Foo {
5 @public
6     id __unsafe_unretained x;
7     id __weak y;
8     id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}}
9 }
10 @property(strong) id x;
11 @property(strong) id y;
12 @property(strong) id z;
13 @end
14
15 @interface Bar {
16 @public
17     id __unsafe_unretained x;
18     id __weak y;
19     id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}}
20 }
21 @property(retain) id x;
22 @property(retain) id y;
23 @property(retain) id z;
24 @end
25
26 @interface Bas {
27 @public
28     id __unsafe_unretained x;
29     id __weak y;
30     id __autoreleasing z; // expected-error {{instance variables cannot have __autoreleasing ownership}}
31 }
32 @property(copy) id x;
33 @property(copy) id y;
34 @property(copy) id z;
35 @end
36
37 // Errors should start about here :-)
38
39 @interface Bat 
40 @property(strong) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}}
41 @property(strong) __weak id y; // expected-error {{strong property 'y' may not also be declared __weak}}
42 @property(strong) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}}
43 @end
44
45 @interface Bau
46 @property(retain) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}}
47 @property(retain) __weak id y; // expected-error {{strong property 'y' may not also be declared __weak}}
48 @property(retain) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}}
49 @end
50
51 @interface Bav 
52 @property(copy) __unsafe_unretained id x; // expected-error {{strong property 'x' may not also be declared __unsafe_unretained}}
53 @property(copy) __weak id y; // expected-error {{strong property 'y' may not also be declared __weak}}
54 @property(copy) __autoreleasing id z; // expected-error {{strong property 'z' may not also be declared __autoreleasing}}
55 @end
56
57 @interface Bingo 
58 @property(assign) __unsafe_unretained id x;
59 @property(assign) __weak id y; // expected-error {{unsafe_unretained property 'y' may not also be declared __weak}}
60 @property(assign) __autoreleasing id z; // expected-error {{unsafe_unretained property 'z' may not also be declared __autoreleasing}}
61 @end
62
63 @interface Batman 
64 @property(unsafe_unretained) __unsafe_unretained id x;
65 @property(unsafe_unretained) __weak id y; // expected-error {{unsafe_unretained property 'y' may not also be declared __weak}}
66 @property(unsafe_unretained) __autoreleasing id z; // expected-error {{unsafe_unretained property 'z' may not also be declared __autoreleasing}}
67 @end
68
69 // rdar://9396329
70 @interface Super
71 @property (readonly, retain) id foo;
72 @property (readonly, weak) id fee;
73 @property (readonly, strong) id frr;
74 @end
75
76 @interface Bugg : Super
77 @property (readwrite) id foo;
78 @property (readwrite) id fee;
79 @property (readwrite) id frr;
80 @end
81
82 // rdar://20152386
83 // rdar://20383235
84
85 @interface NSObject @end
86
87 #pragma clang assume_nonnull begin
88 @interface I: NSObject
89 @property(nonatomic, weak) id delegate; // Do not warn, nullable is inferred. 
90 @property(nonatomic, weak, readonly) id ROdelegate; // Do not warn, nullable is inferred.
91 @property(nonatomic, weak, nonnull) id NonNulldelete; // expected-error {{property attributes 'nonnull' and 'weak' are mutually exclusive}}
92 @property(nonatomic, weak, nullable) id Nullabledelete; // do not warn
93
94 // strong cases.
95 @property(nonatomic, strong) id stdelegate; // Do not warn
96 @property(nonatomic, readonly) id stROdelegate; // Do not warn
97 @property(nonatomic, strong, nonnull) id stNonNulldelete; // Do not warn
98 @property(nonatomic, nullable) id stNullabledelete; // do not warn
99 @end
100 #pragma clang assume_nonnull end
101
102 @interface J: NSObject
103 @property(nonatomic, weak) id ddd;   // Do not warn, nullable is inferred.
104 @property(nonatomic, weak, nonnull) id delegate; // expected-error {{property attributes 'nonnull' and 'weak' are mutually exclusive}}
105 @property(nonatomic, weak, nonnull, readonly) id ROdelegate; // expected-error {{property attributes 'nonnull' and 'weak' are mutually exclusive}}
106 @end
107
108 // rdar://problem/23931441
109 @protocol P
110 @property(readonly, retain) id prop;
111 @end
112
113 __attribute__((objc_root_class))
114 @interface I2<P>
115 @end
116
117 @interface I2()
118 @property (readwrite) id prop;
119 @end
120
121 @implementation I2
122 @synthesize prop;
123 @end