blob: 4beb23ada33a4b138f85dc9c0c267a68d3d5fc19 [file] [log] [blame]
Fariborz Jahanianfd090882012-09-21 20:46:37 +00001// RUN: %clang_cc1 -fsyntax-only -triple thumbv6-apple-ios3.0 -verify -Wno-objc-root-class %s
2// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -triple thumbv6-apple-ios3.0 -verify -Wno-objc-root-class %s
3// rdar://12324295
4
Jordan Rose9a1f7d82012-10-10 16:42:38 +00005typedef signed char BOOL;
6
Fariborz Jahanianfd090882012-09-21 20:46:37 +00007@protocol P
Stephen Hines651f13c2014-04-23 16:59:28 -07008@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}}
Fariborz Jahanianfd090882012-09-21 20:46:37 +00009@end
10
11@protocol P1<P>
Ted Kremenekcb344392013-04-06 00:34:27 +000012- (void)setPtarget:(id)arg;
Fariborz Jahanianfd090882012-09-21 20:46:37 +000013@end
14
15
16@interface UITableViewCell<P1>
Stephen Hines651f13c2014-04-23 16:59:28 -070017@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}}
Fariborz Jahanianfd090882012-09-21 20:46:37 +000018@end
19
20@interface PSTableCell : UITableViewCell
Ted Kremenekcb344392013-04-06 00:34:27 +000021 - (void)setTarget:(id)target;
Fariborz Jahanianfd090882012-09-21 20:46:37 +000022@end
23
24@interface UITableViewCell(UIDeprecated)
Stephen Hines651f13c2014-04-23 16:59:28 -070025@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}} \
Ted Kremenekcb344392013-04-06 00:34:27 +000026 // expected-note 4 {{property 'dep_target' is declared deprecated here}} \
Stephen Hines651f13c2014-04-23 16:59:28 -070027 // expected-note 2 {{'setDep_target:' has been explicitly marked deprecated here}}
Fariborz Jahanianfd090882012-09-21 20:46:37 +000028@end
29
30@implementation PSTableCell
31- (void)setTarget:(id)target {};
32- (void)setPtarget:(id)val {};
33- (void) Meth {
Ted Kremenekcb344392013-04-06 00:34:27 +000034 [self setTarget: (id)0]; // no-warning
35 [self setDep_target: [self dep_target]]; // expected-warning {{'dep_target' is deprecated: first deprecated in iOS 3.0}} \
36 // expected-warning {{'setDep_target:' is deprecated: first deprecated in iOS 3.0}}
37
38 [self setPtarget: (id)0]; // no-warning
39}
40@end
41
42@implementation UITableViewCell
43@synthesize target;
44@synthesize ptarget;
45- (void)setPtarget:(id)val {};
46- (void)setTarget:(id)target {};
47- (void) Meth {
Fariborz Jahanianfd090882012-09-21 20:46:37 +000048 [self setTarget: (id)0]; // expected-warning {{'setTarget:' is deprecated: first deprecated in iOS 3.0}}
49 [self setDep_target: [self dep_target]]; // expected-warning {{'dep_target' is deprecated: first deprecated in iOS 3.0}} \
50 // expected-warning {{'setDep_target:' is deprecated: first deprecated in iOS 3.0}}
51
Ted Kremenekcb344392013-04-06 00:34:27 +000052 [self setPtarget: (id)0]; // no-warning
Fariborz Jahanianfd090882012-09-21 20:46:37 +000053}
54@end
Jordan Rose9a1f7d82012-10-10 16:42:38 +000055
56
57@interface CustomAccessorNames
Stephen Hines651f13c2014-04-23 16:59:28 -070058@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}}
Jordan Rose9a1f7d82012-10-10 16:42:38 +000059
Stephen Hines651f13c2014-04-23 16:59:28 -070060@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}}
Jordan Rose9a1f7d82012-10-10 16:42:38 +000061@end
62
63void testCustomAccessorNames(CustomAccessorNames *obj) {
64 if ([obj isEnabled]) // expected-warning {{'isEnabled' is deprecated: first deprecated in iOS 3.0}}
65 [obj setNewDelegate:0]; // expected-warning {{'setNewDelegate:' is deprecated: first deprecated in iOS 3.0}}
66}
Jordan Rose04bec392012-10-10 16:42:54 +000067
68
69@interface ProtocolInCategory
70@end
71
72@interface ProtocolInCategory (TheCategory) <P1>
Ted Kremenekcb344392013-04-06 00:34:27 +000073- (id)ptarget;
Jordan Rose04bec392012-10-10 16:42:54 +000074@end
75
Ted Kremenekcb344392013-04-06 00:34:27 +000076id useDeprecatedProperty(ProtocolInCategory *obj, id<P> obj2, int flag) {
77 if (flag)
78 return [obj ptarget]; // no-warning
79 return [obj2 ptarget]; // expected-warning {{'ptarget' is deprecated: first deprecated in iOS 3.0}}
Jordan Rose04bec392012-10-10 16:42:54 +000080}
Stephen Hinesef822542014-07-21 00:47:37 -070081
82// rdar://15951801
83@interface Foo
84{
85 int _x;
86}
87@property(nonatomic,readonly) int x;
88- (void)setX:(int)x __attribute__ ((deprecated)); // expected-note 2 {{'setX:' has been explicitly marked deprecated here}}
89- (int)x __attribute__ ((unavailable)); // expected-note {{'x' has been explicitly marked unavailable here}}
90@end
91
92@implementation Foo
93- (void)setX:(int)x {
94 _x = x;
95}
96- (int)x {
97 return _x;
98}
99@end
100
101void testUserAccessorAttributes(Foo *foo) {
102 [foo setX:5678]; // expected-warning {{'setX:' is deprecated}}
103 foo.x = foo.x; // expected-error {{property access is using 'x' method which is unavailable}} \
104 // expected-warning {{property access is using 'setX:' method which is deprecated}}
105}