diff options
Diffstat (limited to 'clang/test/SemaObjC/default-synthesize.m')
-rw-r--r-- | clang/test/SemaObjC/default-synthesize.m | 140 |
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 |