blob: 767206f88b75dcdbeeea546f8ccf92b2dc643774 [file] [log] [blame]
Anders Carlsson59843ad2009-02-14 19:08:58 +00001// RUN: clang %s -fsyntax-only -verify
2
Chris Lattner553905d2009-02-16 17:19:12 +00003@interface A {
4 int X __attribute__((deprecated));
5}
Anders Carlsson59843ad2009-02-14 19:08:58 +00006+ (void)F __attribute__((deprecated));
7- (void)f __attribute__((deprecated));
8@end
9
10@implementation A
11+ (void)F __attribute__((deprecated))
12{
Chris Lattnerb254ca02009-02-16 17:08:46 +000013 [self F]; // no warning, since the caller is also deprecated.
Anders Carlsson59843ad2009-02-14 19:08:58 +000014}
15
16- (void)g
17{
Chris Lattner553905d2009-02-16 17:19:12 +000018 X++; // expected-warning{{'X' is deprecated}}
19 self->X++; // expected-warning{{'X' is deprecated}}
Anders Carlsson59843ad2009-02-14 19:08:58 +000020 [self f]; // expected-warning{{'f' is deprecated}}
21}
22
23- (void)f
24{
25 [self f]; // expected-warning{{'f' is deprecated}}
26}
27@end
28
29@interface B: A
30@end
31
32@implementation B
33+ (void)G
34{
35 [super F]; // expected-warning{{'F' is deprecated}}
36}
37
38- (void)g
39{
40 [super f]; // // expected-warning{{'f' is deprecated}}
41}
42@end
43
44@protocol P
45- (void)p __attribute__((deprecated));
46@end
47
48void t1(A *a)
49{
50 [A F]; // expected-warning{{'F' is deprecated}}
51 [a f]; // expected-warning{{'f' is deprecated}}
52}
53
54void t2(id a)
55{
56 [a f];
57}
58
59void t3(A<P>* a)
60{
61 [a f]; // expected-warning{{'f' is deprecated}}
62 [a p]; // expected-warning{{'p' is deprecated}}
63}
64
65void t4(Class c)
66{
67 [c F];
68}
69