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