xref: /llvm-project/clang/test/SemaObjC/tentative-property-decl.m (revision 0f1c1be1968076d6f96f8a7bcc4a15cf195ecd97)
1// RUN: %clang_cc1 -fsyntax-only -Weverything -verify %s
2// expected-no-diagnostics
3/** A property may not be both 'readonly' and having a memory management attribute
4    (copy/retain/etc.). But, property declaration in primary class and protcols
5    are tentative as they may be overridden into a 'readwrite' property in class
6    extensions. So, do not issue any warning on 'readonly' and memory management
7    attributes in a property.
8*/
9
10@interface Super {
11}
12@end
13
14@class NSString;
15
16@interface MyClass : Super
17@property(nonatomic, copy, readonly) NSString *prop;
18@property(nonatomic, copy, readonly) id warnProp;
19@end
20
21@interface MyClass ()
22@property(nonatomic, copy, readwrite) NSString *prop;
23@end
24
25@implementation MyClass
26@synthesize prop;
27@synthesize warnProp;
28@end
29
30
31@protocol P
32@property(nonatomic, copy, readonly) NSString *prop;
33@property(nonatomic, copy, readonly) id warnProp;
34@end
35
36@interface YourClass : Super <P>
37@end
38
39@interface YourClass ()
40@property(nonatomic, copy, readwrite) NSString *prop;
41@end
42
43@implementation YourClass
44@synthesize prop;
45@synthesize warnProp;
46@end
47
48