summaryrefslogtreecommitdiff
path: root/clang/test/SemaObjC/default-synthesize.m
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/SemaObjC/default-synthesize.m')
-rw-r--r--clang/test/SemaObjC/default-synthesize.m140
1 files changed, 140 insertions, 0 deletions
diff --git a/clang/test/SemaObjC/default-synthesize.m b/clang/test/SemaObjC/default-synthesize.m
new file mode 100644
index 0000000..e6ea0a5
--- /dev/null
+++ b/clang/test/SemaObjC/default-synthesize.m
@@ -0,0 +1,140 @@
+// RUN: %clang_cc1 -fsyntax-only -fobjc-default-synthesize-properties -verify -Wno-objc-root-class %s
+
+@interface NSString @end
+
+@interface NSObject @end
+
+@interface SynthItAll
+@property int howMany;
+@property (retain) NSString* what;
+@end
+
+@implementation SynthItAll
+#if !__has_feature(objc_default_synthesize_properties)
+@synthesize howMany, what;
+#endif
+@end
+
+
+@interface SynthSetter : NSObject
+@property (nonatomic) int howMany; // REM: nonatomic to avoid warnings about only implementing one of the pair
+@property (nonatomic, retain) NSString* what;
+@end
+
+@implementation SynthSetter
+#if !__has_feature(objc_default_synthesize_properties)
+@synthesize howMany, what;
+#endif
+
+- (int) howMany {
+ return self.howMany;
+}
+// - (void) setHowMany: (int) value
+
+- (NSString*) what {
+ return self.what;
+}
+// - (void) setWhat: (NSString*) value
+@end
+
+
+@interface SynthGetter : NSObject
+@property (nonatomic) int howMany; // REM: nonatomic to avoid warnings about only implementing one of the pair
+@property (nonatomic, retain) NSString* what;
+@end
+
+@implementation SynthGetter
+#if !__has_feature(objc_default_synthesize_properties)
+@synthesize howMany, what;
+#endif
+
+// - (int) howMany
+- (void) setHowMany: (int) value {
+ self.howMany = value;
+}
+
+// - (NSString*) what
+- (void) setWhat: (NSString*) value {
+ if (self.what != value) {
+ }
+}
+@end
+
+
+@interface SynthNone : NSObject
+@property int howMany;
+@property (retain) NSString* what;
+@end
+
+@implementation SynthNone
+#if !__has_feature(objc_default_synthesize_properties)
+@synthesize howMany, what; // REM: Redundant anyway
+#endif
+
+- (int) howMany {
+ return self.howMany;
+}
+- (void) setHowMany: (int) value {
+ self.howMany = value;
+}
+
+- (NSString*) what {
+ return self.what;
+}
+- (void) setWhat: (NSString*) value {
+ if (self.what != value) {
+ }
+}
+@end
+
+@protocol TopProtocol
+ @property (readonly) id myString;
+@end
+
+@interface TopClass <TopProtocol>
+{
+ id myString;
+}
+@end
+
+@interface SubClass : TopClass <TopProtocol>
+@end
+
+@implementation SubClass @end
+
+// rdar://7920807
+@interface C @end
+@interface C (Category)
+@property int p; // expected-note 2 {{property declared here}}
+@end
+@implementation C (Category) // expected-warning {{property 'p' requires method 'p' to be defined}} \
+ // expected-warning {{property 'p' requires method 'setP:' to be defined}}
+@end
+
+// Don't complain if a property is already @synthesized by usr.
+@interface D
+{
+}
+@property int PROP;
+@end
+
+@implementation D
+- (int) Meth { return self.PROP; }
+#if __has_feature(objc_default_synthesize_properties)
+@synthesize PROP=IVAR;
+#endif
+@end
+
+// rdar://10567333
+@protocol MyProtocol
+@property (nonatomic, strong) NSString *requiredString; // expected-note {{property declared here}}
+
+@optional
+@property (nonatomic, strong) NSString *optionalString;
+@end
+
+@interface MyClass <MyProtocol>
+@end
+
+@implementation MyClass // expected-warning {{auto property synthesis will not synthesize property declared in a protocol}}
+@end