blob: be3ef08117141a4990daf7b5031c84a17e80162d [file] [log] [blame]
Fariborz Jahanian77e2dde2010-02-09 21:49:50 +00001// RUN: %clang_cc1 -fsyntax-only -fobjc-nonfragile-abi2 -verify %s
2
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)
100@property int p; // expected-warning {{property 'p' requires method 'p' to be defined }} \
101 // expected-warning {{property 'p' requires method 'setP:' to be defined}}
102@end
103@implementation C (Category) // expected-note 2 {{implementation is here}}
104@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
114- (int) Meth { return self.PROP; }
115@synthesize PROP=IVAR;
116@end
117