diff options
Diffstat (limited to 'test/SemaObjC/property-deprecated-warning.m')
-rw-r--r-- | test/SemaObjC/property-deprecated-warning.m | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/test/SemaObjC/property-deprecated-warning.m b/test/SemaObjC/property-deprecated-warning.m index 4beb23ada33a..cec376838def 100644 --- a/test/SemaObjC/property-deprecated-warning.m +++ b/test/SemaObjC/property-deprecated-warning.m @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -triple thumbv6-apple-ios3.0 -verify -Wno-objc-root-class %s +// RUN: %clang_cc1 -D WARN_PARTIAL -Wpartial-availability -fsyntax-only -triple thumbv6-apple-ios3.0 -verify -Wno-objc-root-class %s // RUN: %clang_cc1 -x objective-c++ -fsyntax-only -triple thumbv6-apple-ios3.0 -verify -Wno-objc-root-class %s // rdar://12324295 @@ -6,29 +7,47 @@ typedef signed char BOOL; @protocol P @property(nonatomic,assign) id ptarget __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{property 'ptarget' is declared deprecated here}} expected-note {{'ptarget' has been explicitly marked deprecated here}} + +#if defined(WARN_PARTIAL) +// expected-note@+2 {{property 'partialPtarget' is declared partial here}} expected-note@+2 {{'partialPtarget' has been explicitly marked partial here}} +#endif +@property(nonatomic,assign) id partialPtarget __attribute__((availability(ios,introduced=5.0))); @end @protocol P1<P> - (void)setPtarget:(id)arg; +- (void)setPartialPtarget:(id)arg; @end @interface UITableViewCell<P1> @property(nonatomic,assign) id target __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{property 'target' is declared deprecated here}} expected-note {{'setTarget:' has been explicitly marked deprecated here}} + +#if defined(WARN_PARTIAL) +// expected-note@+2 {{property 'partialTarget' is declared partial here}} expected-note@+2 {{'setPartialTarget:' has been explicitly marked partial here}} +#endif +@property(nonatomic,assign) id partialTarget __attribute__((availability(ios,introduced=5.0))); @end @interface PSTableCell : UITableViewCell - (void)setTarget:(id)target; + - (void)setPartialTarget:(id)target; @end @interface UITableViewCell(UIDeprecated) @property(nonatomic,assign) id dep_target __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note 2 {{'dep_target' has been explicitly marked deprecated here}} \ // expected-note 4 {{property 'dep_target' is declared deprecated here}} \ // expected-note 2 {{'setDep_target:' has been explicitly marked deprecated here}} + +#if defined(WARN_PARTIAL) +// expected-note@+2 4 {{property 'partial_dep_target' is declared partial here}} expected-note@+2 2 {{'partial_dep_target' has been explicitly marked partial here}} expected-note@+2 2 {{'setPartial_dep_target:' has been explicitly marked partial here}} +#endif +@property(nonatomic,assign) id partial_dep_target __attribute__((availability(ios,introduced=5.0))); @end @implementation PSTableCell - (void)setTarget:(id)target {}; +- (void)setPartialTarget:(id)target {}; - (void)setPtarget:(id)val {}; - (void) Meth { [self setTarget: (id)0]; // no-warning @@ -36,20 +55,41 @@ typedef signed char BOOL; // expected-warning {{'setDep_target:' is deprecated: first deprecated in iOS 3.0}} [self setPtarget: (id)0]; // no-warning + [self setPartialTarget: (id)0]; // no-warning +#if defined(WARN_PARTIAL) + // expected-warning@+2 {{'partial_dep_target' is partial: introduced in iOS 5.0}} expected-warning@+2 {{'setPartial_dep_target:' is partial: introduced in iOS 5.0}} expected-note@+2 {{explicitly redeclare 'partial_dep_target' to silence this warning}} expected-note@+2 {{explicitly redeclare 'setPartial_dep_target:' to silence this warning}} +#endif + [self setPartial_dep_target: [self partial_dep_target]]; + + [self setPartialPtarget: (id)0]; // no-warning } @end @implementation UITableViewCell @synthesize target; +@synthesize partialTarget; @synthesize ptarget; +@synthesize partialPtarget; - (void)setPtarget:(id)val {}; +- (void)setPartialPtarget:(id)val {}; - (void)setTarget:(id)target {}; +- (void)setPartialTarget:(id)target {}; - (void) Meth { [self setTarget: (id)0]; // expected-warning {{'setTarget:' is deprecated: first deprecated in iOS 3.0}} [self setDep_target: [self dep_target]]; // expected-warning {{'dep_target' is deprecated: first deprecated in iOS 3.0}} \ // expected-warning {{'setDep_target:' is deprecated: first deprecated in iOS 3.0}} - + [self setPtarget: (id)0]; // no-warning + +#if defined(WARN_PARTIAL) + // expected-warning@+2 {{'setPartialTarget:' is partial: introduced in iOS 5.0}} expected-note@+2 {{explicitly redeclare 'setPartialTarget:' to silence this warning}} +#endif + [self setPartialTarget: (id)0]; +#if defined(WARN_PARTIAL) + // expected-warning@+2 {{'partial_dep_target' is partial: introduced in iOS 5.0}} expected-warning@+2 {{'setPartial_dep_target:' is partial: introduced in iOS 5.0}} expected-note@+2 {{explicitly redeclare 'partial_dep_target' to silence this warning}} expected-note@+2 {{explicitly redeclare 'setPartial_dep_target:' to silence this warning}} +#endif + [self setPartial_dep_target: [self partial_dep_target]]; + [self setPartialPtarget: (id)0]; // no-warning } @end @@ -58,11 +98,27 @@ typedef signed char BOOL; @property(getter=isEnabled,assign) BOOL enabled __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{'isEnabled' has been explicitly marked deprecated here}} expected-note {{property 'enabled' is declared deprecated here}} @property(setter=setNewDelegate:,assign) id delegate __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{'setNewDelegate:' has been explicitly marked deprecated here}} expected-note {{property 'delegate' is declared deprecated here}} + +#if defined(WARN_PARTIAL) +// expected-note@+2 {{property 'partialEnabled' is declared partial here}} expected-note@+2 {{'partialIsEnabled' has been explicitly marked partial here}} +#endif +@property(getter=partialIsEnabled,assign) BOOL partialEnabled __attribute__((availability(ios,introduced=5.0))); + +#if defined(WARN_PARTIAL) +// expected-note@+2 {{property 'partialDelegate' is declared partial here}} expected-note@+2 {{'partialSetNewDelegate:' has been explicitly marked partial here}} +#endif +@property(setter=partialSetNewDelegate:,assign) id partialDelegate __attribute__((availability(ios,introduced=5.0))); @end void testCustomAccessorNames(CustomAccessorNames *obj) { if ([obj isEnabled]) // expected-warning {{'isEnabled' is deprecated: first deprecated in iOS 3.0}} [obj setNewDelegate:0]; // expected-warning {{'setNewDelegate:' is deprecated: first deprecated in iOS 3.0}} + +#if defined(WARN_PARTIAL) +// expected-warning@+2 {{'partialIsEnabled' is partial: introduced in iOS 5.0}} expected-warning@+3 {{'partialSetNewDelegate:' is partial: introduced in iOS 5.0}} expected-note@+2 {{explicitly redeclare 'partialIsEnabled' to silence this warning}} expected-note@+3 {{explicitly redeclare 'partialSetNewDelegate:' to silence this warning}} +#endif + if ([obj partialIsEnabled]) + [obj partialSetNewDelegate:0]; } @@ -71,12 +127,20 @@ void testCustomAccessorNames(CustomAccessorNames *obj) { @interface ProtocolInCategory (TheCategory) <P1> - (id)ptarget; +- (id)partialPtarget; @end id useDeprecatedProperty(ProtocolInCategory *obj, id<P> obj2, int flag) { if (flag) return [obj ptarget]; // no-warning return [obj2 ptarget]; // expected-warning {{'ptarget' is deprecated: first deprecated in iOS 3.0}} + + if (flag) + return [obj partialPtarget]; // no-warning +#if defined(WARN_PARTIAL) +// expected-warning@+2 {{'partialPtarget' is partial: introduced in iOS 5.0}} expected-note@+2 {{explicitly redeclare 'partialPtarget' to silence this warning}} +#endif + return [obj2 partialPtarget]; } // rdar://15951801 |