blob: d608ded97a2d74f8f880f0d42166f3e673d724c5 [file] [log] [blame]
John McCalld1e40d52011-10-02 01:16:38 +00001// RUN: %clang_cc1 -fsyntax-only -fobjc-default-synthesize-properties -verify %s
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +00002
3@interface NSString @end
4
5@interface NSObject @end
6
7@interface SynthItAll
8@property int howMany;
9@property (retain) NSString* what;
10@end
11
12@implementation SynthItAll
13//@synthesize howMany, what;
14@end
15
16
17@interface SynthSetter : NSObject
18@property (nonatomic) int howMany; // REM: nonatomic to avoid warnings about only implementing one of the pair
19@property (nonatomic, retain) NSString* what;
20@end
21
22@implementation SynthSetter
23//@synthesize howMany, what;
24
25- (int) howMany {
Fariborz Jahanian6aae87d2010-04-02 20:09:24 +000026 return self.howMany;
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +000027}
28// - (void) setHowMany: (int) value
29
30- (NSString*) what {
Fariborz Jahanian6aae87d2010-04-02 20:09:24 +000031 return self.what;
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +000032}
33// - (void) setWhat: (NSString*) value
34@end
35
36
37@interface SynthGetter : NSObject
38@property (nonatomic) int howMany; // REM: nonatomic to avoid warnings about only implementing one of the pair
39@property (nonatomic, retain) NSString* what;
40@end
41
42@implementation SynthGetter
43//@synthesize howMany, what;
44
45// - (int) howMany
46- (void) setHowMany: (int) value {
Fariborz Jahanian6aae87d2010-04-02 20:09:24 +000047 self.howMany = value;
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +000048}
49
50// - (NSString*) what
51- (void) setWhat: (NSString*) value {
Fariborz Jahanian6aae87d2010-04-02 20:09:24 +000052 if (self.what != value) {
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +000053 }
54}
55@end
56
57
58@interface SynthNone : NSObject
59@property int howMany;
60@property (retain) NSString* what;
61@end
62
63@implementation SynthNone
64//@synthesize howMany, what; // REM: Redundant anyway
65
66- (int) howMany {
Fariborz Jahanian6aae87d2010-04-02 20:09:24 +000067 return self.howMany;
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +000068}
69- (void) setHowMany: (int) value {
Fariborz Jahanian6aae87d2010-04-02 20:09:24 +000070 self.howMany = value;
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +000071}
72
73- (NSString*) what {
Fariborz Jahanian6aae87d2010-04-02 20:09:24 +000074 return self.what;
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +000075}
76- (void) setWhat: (NSString*) value {
Fariborz Jahanian6aae87d2010-04-02 20:09:24 +000077 if (self.what != value) {
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +000078 }
79}
80@end
81
Fariborz Jahaniand502a942010-04-21 18:57:20 +000082@protocol TopProtocol
83 @property (readonly) id myString;
84@end
85
86@interface TopClass <TopProtocol>
87{
Fariborz Jahanian738698d2010-05-03 15:49:20 +000088 id myString;
Fariborz Jahaniand502a942010-04-21 18:57:20 +000089}
90@end
91
92@interface SubClass : TopClass <TopProtocol>
93@end
94
Fariborz Jahanian738698d2010-05-03 15:49:20 +000095@implementation SubClass @end
Fariborz Jahanian9d846322010-04-29 17:52:18 +000096
Fariborz Jahanian24fce282010-11-09 02:16:57 +000097// rdar://7920807
Fariborz Jahanian9d846322010-04-29 17:52:18 +000098@interface C @end
99@interface C (Category)
Fariborz Jahanianb8607392011-08-27 21:55:47 +0000100@property int p; // expected-note 2 {{property declared here}}
Fariborz Jahanian9d846322010-04-29 17:52:18 +0000101@end
Fariborz Jahanianb8607392011-08-27 21:55:47 +0000102@implementation C (Category) // expected-warning {{property 'p' requires method 'p' to be defined}} \
103 // expected-warning {{property 'p' requires method 'setP:' to be defined}}
Fariborz Jahanian9d846322010-04-29 17:52:18 +0000104@end
105
Fariborz Jahaniand3635b92010-07-14 18:11:52 +0000106// Don't complain if a property is already @synthesized by usr.
107@interface D
108{
109}
110@property int PROP;
111@end
112
113@implementation D
Fariborz Jahanian527eec82011-07-22 01:06:53 +0000114- (int) Meth { return self.PROP; }
Fariborz Jahanian78980052011-08-01 22:39:49 +0000115@synthesize PROP=IVAR;
Fariborz Jahaniand3635b92010-07-14 18:11:52 +0000116@end
117
Fariborz Jahanianf8aba8c2011-12-15 01:03:18 +0000118// rdar://10567333
119@protocol MyProtocol
120@property (nonatomic, strong) NSString *requiredString; // expected-note {{property declared here}}
121
122@optional
123@property (nonatomic, strong) NSString *optionalString;
124@end
125
126@interface MyClass <MyProtocol>
127@end
128
129@implementation MyClass // expected-warning {{auto property synthesis will not synthesize property declared in a protocol}}
130@end