1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify -Wno-objc-root-class %s
@interface A {
int X __attribute__((deprecated)); // expected-note 2 {{declared here}}
}
+ (void)F __attribute__((deprecated)); // expected-note 2 {{declared here}}
- (void)f __attribute__((deprecated)); // expected-note 4 {{declared here}}
@end
@implementation A
+ (void)F __attribute__((deprecated))
{
[self F]; // no warning, since the caller is also deprecated.
}
- (void)g
{
X++; // expected-warning{{'X' is deprecated}}
self->X++; // expected-warning{{'X' is deprecated}}
[self f]; // expected-warning{{'f' is deprecated}}
}
- (void)f
{
[self f]; // no warning, the caller is deprecated in its interface.
}
@end
@interface B: A
@end
@implementation B
+ (void)G
{
[super F]; // expected-warning{{'F' is deprecated}}
}
- (void)g
{
[super f]; // // expected-warning{{'f' is deprecated}}
}
@end
@protocol P
- (void)p __attribute__((deprecated)); // expected-note {{declared here}}
@end
void t1(A *a)
{
[A F]; // expected-warning{{'F' is deprecated}}
[a f]; // expected-warning{{'f' is deprecated}}
}
void t2(id a)
{
[a f];
}
void t3(A<P>* a)
{
[a f]; // expected-warning{{'f' is deprecated}}
[a p]; // expected-warning{{'p' is deprecated}}
}
void t4(Class c)
{
[c F];
}
@interface Bar
@property (assign, setter = MySetter:) int FooBar __attribute__ ((deprecated)); // expected-note 2 {{declared here}}
- (void) MySetter : (int) value;
@end
int t5() {
Bar *f;
f.FooBar = 1; // expected-warning {{'FooBar' is deprecated}}
return f.FooBar; // expected-warning {{'FooBar' is deprecated}}
}
__attribute ((deprecated))
@interface DEPRECATED { // expected-note 2 {{declared here}}
@public int ivar;
DEPRECATED *ivar2; // no warning.
}
- (int) instancemethod;
- (DEPRECATED *) meth; // no warning.
@property int prop;
@end
@interface DEPRECATED (Category) // no warning.
- (DEPRECATED *) meth2; // no warning.
@end
@interface DEPRECATED (Category2) // no warning.
@end
@implementation DEPRECATED (Category2) // expected-warning {{'DEPRECATED' is deprecated}}
@end
@interface NS : DEPRECATED // expected-warning {{'DEPRECATED' is deprecated}}
@end
@interface Test2
@property int test2 __attribute__((deprecated)); // expected-note 4 {{declared here}} \
// expected-note 2 {{property 'test2' is declared deprecated here}}
@end
void test(Test2 *foo) {
int x;
x = foo.test2; // expected-warning {{'test2' is deprecated}}
x = [foo test2]; // expected-warning {{'test2' is deprecated}}
foo.test2 = x; // expected-warning {{'test2' is deprecated}}
[foo setTest2: x]; // expected-warning {{'setTest2:' is deprecated}}
}
__attribute__((deprecated))
@interface A(Blah) // expected-error{{attributes may not be specified on a category}}
@end
typedef struct {
int x;
} footype __attribute((deprecated)); // expected-note 2 {{declared here}}
@interface foo {
footype a; // expected-warning {{'footype' is deprecated}}
footype b __attribute((deprecated));
}
@property footype c; // expected-warning {{'footype' is deprecated}}
@property footype d __attribute((deprecated));
@end
// rdar://13569424
@interface NewI
+(void)cmeth;
@end
typedef NewI DeprI __attribute__((deprecated("blah"))); // expected-note 4 {{'DeprI' declared here}}
@interface SI : DeprI // expected-warning {{'DeprI' is deprecated: blah}}
-(DeprI*)meth; // expected-warning {{'DeprI' is deprecated: blah}}
@end
@implementation SI
-(DeprI*)meth { // expected-warning {{'DeprI' is deprecated: blah}}
[DeprI cmeth]; // expected-warning {{'DeprI' is deprecated: blah}}
return 0;
}
@end
|