xref: /aosp_15_r20/external/clang/test/SemaObjC/property-deprecated-warning.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1  -fsyntax-only -triple thumbv6-apple-ios3.0 -verify -Wno-objc-root-class %s
2*67e74705SXin Li// RUN: %clang_cc1 -D WARN_PARTIAL -Wpartial-availability -fsyntax-only -triple thumbv6-apple-ios3.0 -verify -Wno-objc-root-class %s
3*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -triple thumbv6-apple-ios3.0 -verify -Wno-objc-root-class %s
4*67e74705SXin Li// rdar://12324295
5*67e74705SXin Li
6*67e74705SXin Litypedef signed char BOOL;
7*67e74705SXin Li
8*67e74705SXin Li@protocol P
9*67e74705SXin Li@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}}
10*67e74705SXin Li
11*67e74705SXin Li#if defined(WARN_PARTIAL)
12*67e74705SXin Li// expected-note@+2 {{property 'partialPtarget' is declared partial here}} expected-note@+2 {{'partialPtarget' has been explicitly marked partial here}}
13*67e74705SXin Li#endif
14*67e74705SXin Li@property(nonatomic,assign) id partialPtarget __attribute__((availability(ios,introduced=5.0)));
15*67e74705SXin Li@end
16*67e74705SXin Li
17*67e74705SXin Li@protocol P1<P>
18*67e74705SXin Li- (void)setPtarget:(id)arg;
19*67e74705SXin Li- (void)setPartialPtarget:(id)arg;
20*67e74705SXin Li@end
21*67e74705SXin Li
22*67e74705SXin Li
23*67e74705SXin Li@interface UITableViewCell<P1>
24*67e74705SXin Li@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}}
25*67e74705SXin Li
26*67e74705SXin Li#if defined(WARN_PARTIAL)
27*67e74705SXin Li// expected-note@+2 {{property 'partialTarget' is declared partial here}} expected-note@+2 {{'setPartialTarget:' has been explicitly marked partial here}}
28*67e74705SXin Li#endif
29*67e74705SXin Li@property(nonatomic,assign) id partialTarget __attribute__((availability(ios,introduced=5.0)));
30*67e74705SXin Li@end
31*67e74705SXin Li
32*67e74705SXin Li@interface PSTableCell : UITableViewCell
33*67e74705SXin Li - (void)setTarget:(id)target;
34*67e74705SXin Li - (void)setPartialTarget:(id)target;
35*67e74705SXin Li@end
36*67e74705SXin Li
37*67e74705SXin Li@interface UITableViewCell(UIDeprecated)
38*67e74705SXin Li@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}} \
39*67e74705SXin Li                                                                                    // expected-note 4 {{property 'dep_target' is declared deprecated here}} \
40*67e74705SXin Li                                                                                    // expected-note 2 {{'setDep_target:' has been explicitly marked deprecated here}}
41*67e74705SXin Li
42*67e74705SXin Li#if defined(WARN_PARTIAL)
43*67e74705SXin Li// 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}}
44*67e74705SXin Li#endif
45*67e74705SXin Li@property(nonatomic,assign) id partial_dep_target  __attribute__((availability(ios,introduced=5.0)));
46*67e74705SXin Li@end
47*67e74705SXin Li
48*67e74705SXin Li@implementation PSTableCell
49*67e74705SXin Li- (void)setTarget:(id)target {};
50*67e74705SXin Li- (void)setPartialTarget:(id)target {};
51*67e74705SXin Li- (void)setPtarget:(id)val {};
52*67e74705SXin Li- (void) Meth {
53*67e74705SXin Li  [self setTarget: (id)0]; // no-warning
54*67e74705SXin Li  [self setDep_target: [self dep_target]]; // expected-warning {{'dep_target' is deprecated: first deprecated in iOS 3.0}} \
55*67e74705SXin Li                                           // expected-warning {{'setDep_target:' is deprecated: first deprecated in iOS 3.0}}
56*67e74705SXin Li
57*67e74705SXin Li  [self setPtarget: (id)0]; // no-warning
58*67e74705SXin Li  [self setPartialTarget: (id)0]; // no-warning
59*67e74705SXin Li#if defined(WARN_PARTIAL)
60*67e74705SXin Li  // 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}}
61*67e74705SXin Li#endif
62*67e74705SXin Li  [self setPartial_dep_target: [self partial_dep_target]];
63*67e74705SXin Li
64*67e74705SXin Li  [self setPartialPtarget: (id)0]; // no-warning
65*67e74705SXin Li}
66*67e74705SXin Li@end
67*67e74705SXin Li
68*67e74705SXin Li@implementation UITableViewCell
69*67e74705SXin Li@synthesize target;
70*67e74705SXin Li@synthesize partialTarget;
71*67e74705SXin Li@synthesize ptarget;
72*67e74705SXin Li@synthesize partialPtarget;
73*67e74705SXin Li- (void)setPtarget:(id)val {};
74*67e74705SXin Li- (void)setPartialPtarget:(id)val {};
75*67e74705SXin Li- (void)setTarget:(id)target {};
76*67e74705SXin Li- (void)setPartialTarget:(id)target {};
77*67e74705SXin Li- (void) Meth {
78*67e74705SXin Li  [self setTarget: (id)0]; // expected-warning {{'setTarget:' is deprecated: first deprecated in iOS 3.0}}
79*67e74705SXin Li  [self setDep_target: [self dep_target]]; // expected-warning {{'dep_target' is deprecated: first deprecated in iOS 3.0}} \
80*67e74705SXin Li                                           // expected-warning {{'setDep_target:' is deprecated: first deprecated in iOS 3.0}}
81*67e74705SXin Li
82*67e74705SXin Li  [self setPtarget: (id)0]; // no-warning
83*67e74705SXin Li
84*67e74705SXin Li#if defined(WARN_PARTIAL)
85*67e74705SXin Li  // expected-warning@+2 {{'setPartialTarget:' is partial: introduced in iOS 5.0}} expected-note@+2 {{explicitly redeclare 'setPartialTarget:' to silence this warning}}
86*67e74705SXin Li#endif
87*67e74705SXin Li  [self setPartialTarget: (id)0];
88*67e74705SXin Li#if defined(WARN_PARTIAL)
89*67e74705SXin Li  // 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}}
90*67e74705SXin Li#endif
91*67e74705SXin Li  [self setPartial_dep_target: [self partial_dep_target]];
92*67e74705SXin Li  [self setPartialPtarget: (id)0]; // no-warning
93*67e74705SXin Li}
94*67e74705SXin Li@end
95*67e74705SXin Li
96*67e74705SXin Li
97*67e74705SXin Li@interface CustomAccessorNames
98*67e74705SXin Li@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}}
99*67e74705SXin Li
100*67e74705SXin Li@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}}
101*67e74705SXin Li
102*67e74705SXin Li#if defined(WARN_PARTIAL)
103*67e74705SXin Li// expected-note@+2 {{property 'partialEnabled' is declared partial here}} expected-note@+2 {{'partialIsEnabled' has been explicitly marked partial here}}
104*67e74705SXin Li#endif
105*67e74705SXin Li@property(getter=partialIsEnabled,assign) BOOL partialEnabled __attribute__((availability(ios,introduced=5.0)));
106*67e74705SXin Li
107*67e74705SXin Li#if defined(WARN_PARTIAL)
108*67e74705SXin Li// expected-note@+2 {{property 'partialDelegate' is declared partial here}} expected-note@+2 {{'partialSetNewDelegate:' has been explicitly marked partial here}}
109*67e74705SXin Li#endif
110*67e74705SXin Li@property(setter=partialSetNewDelegate:,assign) id partialDelegate __attribute__((availability(ios,introduced=5.0)));
111*67e74705SXin Li@end
112*67e74705SXin Li
113*67e74705SXin Livoid testCustomAccessorNames(CustomAccessorNames *obj) {
114*67e74705SXin Li  if ([obj isEnabled]) // expected-warning {{'isEnabled' is deprecated: first deprecated in iOS 3.0}}
115*67e74705SXin Li    [obj setNewDelegate:0]; // expected-warning {{'setNewDelegate:' is deprecated: first deprecated in iOS 3.0}}
116*67e74705SXin Li
117*67e74705SXin Li#if defined(WARN_PARTIAL)
118*67e74705SXin Li// 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}}
119*67e74705SXin Li#endif
120*67e74705SXin Li  if ([obj partialIsEnabled])
121*67e74705SXin Li    [obj partialSetNewDelegate:0];
122*67e74705SXin Li}
123*67e74705SXin Li
124*67e74705SXin Li
125*67e74705SXin Li@interface ProtocolInCategory
126*67e74705SXin Li@end
127*67e74705SXin Li
128*67e74705SXin Li@interface ProtocolInCategory (TheCategory) <P1>
129*67e74705SXin Li- (id)ptarget;
130*67e74705SXin Li- (id)partialPtarget;
131*67e74705SXin Li@end
132*67e74705SXin Li
133*67e74705SXin Liid useDeprecatedProperty(ProtocolInCategory *obj, id<P> obj2, int flag) {
134*67e74705SXin Li  if (flag)
135*67e74705SXin Li    return [obj ptarget];  // no-warning
136*67e74705SXin Li  return [obj2 ptarget];   // expected-warning {{'ptarget' is deprecated: first deprecated in iOS 3.0}}
137*67e74705SXin Li
138*67e74705SXin Li  if (flag)
139*67e74705SXin Li    return [obj partialPtarget];  // no-warning
140*67e74705SXin Li#if defined(WARN_PARTIAL)
141*67e74705SXin Li// expected-warning@+2 {{'partialPtarget' is partial: introduced in iOS 5.0}} expected-note@+2 {{explicitly redeclare 'partialPtarget' to silence this warning}}
142*67e74705SXin Li#endif
143*67e74705SXin Li  return [obj2 partialPtarget];
144*67e74705SXin Li}
145*67e74705SXin Li
146*67e74705SXin Li// rdar://15951801
147*67e74705SXin Li@interface Foo
148*67e74705SXin Li{
149*67e74705SXin Li  int _x;
150*67e74705SXin Li}
151*67e74705SXin Li@property(nonatomic,readonly) int x;
152*67e74705SXin Li- (void)setX:(int)x __attribute__ ((deprecated)); // expected-note 2 {{'setX:' has been explicitly marked deprecated here}}
153*67e74705SXin Li- (int)x __attribute__ ((unavailable)); // expected-note {{'x' has been explicitly marked unavailable here}}
154*67e74705SXin Li@end
155*67e74705SXin Li
156*67e74705SXin Li@implementation Foo
157*67e74705SXin Li- (void)setX:(int)x {
158*67e74705SXin Li	_x = x;
159*67e74705SXin Li}
160*67e74705SXin Li- (int)x {
161*67e74705SXin Li  return _x;
162*67e74705SXin Li}
163*67e74705SXin Li@end
164*67e74705SXin Li
165*67e74705SXin Livoid testUserAccessorAttributes(Foo *foo) {
166*67e74705SXin Li        [foo setX:5678]; // expected-warning {{'setX:' is deprecated}}
167*67e74705SXin Li	foo.x = foo.x; // expected-error {{property access is using 'x' method which is unavailable}} \
168*67e74705SXin Li		       // expected-warning {{property access is using 'setX:' method which is deprecated}}
169*67e74705SXin Li}
170