blob: 3741510e11313fe6c8f875237284728172d09559 [file] [log] [blame]
Daniel Dunbard7d5f022009-03-24 02:24:46 +00001// RUN: clang-cc %s -fsyntax-only -verify
Anders Carlsson59843ad2009-02-14 19:08:58 +00002
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))
Fariborz Jahanian5d36ac22009-05-12 21:36:23 +000012{ // expected-warning {{method attribute may be specified on method declarations only}}
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{
Chris Lattnerf15970c2009-02-16 19:35:30 +000025 [self f]; // no warning, the caller is deprecated in its interface.
Anders Carlsson59843ad2009-02-14 19:08:58 +000026}
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
Chris Lattner7eba82e2009-02-16 18:35:08 +000070
71
72@interface Bar
73
74@property (assign, setter = MySetter:) int FooBar __attribute__ ((deprecated));
75- (void) MySetter : (int) value;
76@end
77
78int t5() {
79 Bar *f;
80 f.FooBar = 1; // expected-warning {{warning: 'FooBar' is deprecated}}
81 return f.FooBar; // expected-warning {{warning: 'FooBar' is deprecated}}
82}
83
Chris Lattner16b34b42009-02-16 21:30:01 +000084
85__attribute ((deprecated))
86@interface DEPRECATED {
87 @public int ivar;
88}
89- (int) instancemethod;
90@property int prop;
91@end
92
93@interface DEPRECATED (Category) // expected-warning {{warning: 'DEPRECATED' is deprecated}}
94@end
Chris Lattnerc7984dd2009-02-16 21:33:09 +000095
96@interface NS : DEPRECATED // expected-warning {{warning: 'DEPRECATED' is deprecated}}
97@end
98
99