1// RUN: %clang_cc1 -fsyntax-only -Wdeprecated-implementations -verify -Wno-objc-root-class %s
2// rdar://8973810
3// rdar://12717705
4
5@protocol P
6- (void) D __attribute__((deprecated)); // expected-note {{method 'D' declared here}}
7@end
8
9@interface A <P>
10+ (void)F __attribute__((deprecated));
11@end
12
13@interface A()
14- (void) E __attribute__((deprecated));
15@end
16
17@implementation A
18+ (void)F { }	// No warning, implementing its own deprecated method
19- (void) D {} //  expected-warning {{Implementing deprecated method}}
20- (void) E {} // No warning, implementing deprecated method in its class extension.
21@end
22
23@interface A(CAT)
24- (void) G __attribute__((deprecated));
25@end
26
27@implementation A(CAT)
28- (void) G {} 	// No warning, implementing its own deprecated method
29@end
30
31__attribute__((deprecated))
32@interface CL // expected-note 2 {{class declared here}} // expected-note 2 {{'CL' has been explicitly marked deprecated here}}
33@end
34
35@implementation CL // expected-warning {{Implementing deprecated class}}
36@end
37
38@implementation CL ( SomeCategory ) // expected-warning {{'CL' is deprecated}} \
39                                    // expected-warning {{Implementing deprecated category}}
40@end
41
42@interface CL_SUB : CL // expected-warning {{'CL' is deprecated}}
43@end
44
45@interface BASE
46- (void) B __attribute__((deprecated)); // expected-note {{method 'B' declared here}}
47@end
48
49@interface SUB : BASE
50@end
51
52@implementation SUB
53- (void) B {} // expected-warning {{Implementing deprecated method}}
54@end
55
56@interface Test
57@end
58
59@interface Test()
60- (id)initSpecialInPrivateHeader __attribute__((deprecated));
61@end
62
63@implementation Test
64- (id)initSpecialInPrivateHeader {
65  return (void *)0;
66}
67@end
68