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