xref: /aosp_15_r20/external/clang/test/SemaObjC/warn-protocol-method-deprecated.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -Wno-objc-root-class -verify %s
2*67e74705SXin Li// rdar://11618852
3*67e74705SXin Li
4*67e74705SXin Li@protocol TestProtocol
5*67e74705SXin Li- (void)newProtocolMethod;
6*67e74705SXin Li- (void)deprecatedProtocolMethod __attribute__((deprecated)); // expected-note 2 {{'deprecatedProtocolMethod' has been explicitly marked deprecated here}}
7*67e74705SXin Li@end
8*67e74705SXin Li
9*67e74705SXin Li@interface NSObject @end
10*67e74705SXin Li
11*67e74705SXin Li@interface TestClass : NSObject <TestProtocol>
12*67e74705SXin Li
13*67e74705SXin Li- (void)newInstanceMethod;
14*67e74705SXin Li- (void)deprecatedInstanceMethod __attribute__((deprecated)); // expected-note {{'deprecatedInstanceMethod' has been explicitly marked deprecated here}}
15*67e74705SXin Li
16*67e74705SXin Li@end
17*67e74705SXin Li
18*67e74705SXin Liint main(int argc, const char * argv[])
19*67e74705SXin Li{
20*67e74705SXin Li
21*67e74705SXin Li    TestClass *testObj = (TestClass*)0;
22*67e74705SXin Li    [testObj newInstanceMethod];
23*67e74705SXin Li    [testObj deprecatedInstanceMethod]; // expected-warning {{'deprecatedInstanceMethod' is deprecated}}
24*67e74705SXin Li
25*67e74705SXin Li    [testObj newProtocolMethod];
26*67e74705SXin Li    [testObj deprecatedProtocolMethod]; // expected-warning {{'deprecatedProtocolMethod' is deprecated}}
27*67e74705SXin Li
28*67e74705SXin Li    id <TestProtocol> testProto = testObj;
29*67e74705SXin Li    [testProto newProtocolMethod];
30*67e74705SXin Li    [testProto deprecatedProtocolMethod]; // expected-warning {{'deprecatedProtocolMethod' is deprecated}}
31*67e74705SXin Li    return 0;
32*67e74705SXin Li}
33