xref: /aosp_15_r20/external/clang/test/SemaObjC/protocol-attribute.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li
3*67e74705SXin Li__attribute ((unavailable))
4*67e74705SXin Li@protocol FwProto; // expected-note{{marked unavailable}}
5*67e74705SXin Li
6*67e74705SXin LiClass <FwProto> cFw = 0;  // expected-error {{'FwProto' is unavailable}}
7*67e74705SXin Li
8*67e74705SXin Li
9*67e74705SXin Li__attribute ((deprecated)) @protocol MyProto1 // expected-note 7 {{'MyProto1' has been explicitly marked deprecated here}}
10*67e74705SXin Li@end
11*67e74705SXin Li
12*67e74705SXin Li@protocol Proto2  <MyProto1>  // expected-warning {{'MyProto1' is deprecated}}
13*67e74705SXin Li+method2;
14*67e74705SXin Li@end
15*67e74705SXin Li
16*67e74705SXin Li
17*67e74705SXin Li@interface MyClass1 <MyProto1>  // expected-warning {{'MyProto1' is deprecated}}
18*67e74705SXin Li{
19*67e74705SXin Li  Class isa;
20*67e74705SXin Li}
21*67e74705SXin Li@end
22*67e74705SXin Li
23*67e74705SXin Li@interface Derived : MyClass1 <MyProto1>  // expected-warning {{'MyProto1' is deprecated}}
24*67e74705SXin Li{
25*67e74705SXin Li	id <MyProto1> ivar;  // expected-warning {{'MyProto1' is deprecated}}
26*67e74705SXin Li}
27*67e74705SXin Li@end
28*67e74705SXin Li
29*67e74705SXin Li@interface MyClass1 (Category) <MyProto1, Proto2>  // expected-warning {{'MyProto1' is deprecated}}
30*67e74705SXin Li@end
31*67e74705SXin Li
32*67e74705SXin Li
33*67e74705SXin Li
34*67e74705SXin LiClass <MyProto1> clsP1 = 0;  // expected-warning {{'MyProto1' is deprecated}}
35*67e74705SXin Li
36*67e74705SXin Li@protocol FwProto @end // expected-note{{marked unavailable}}
37*67e74705SXin Li
38*67e74705SXin Li@interface MyClass2 <FwProto> // expected-error {{'FwProto' is unavailable}}
39*67e74705SXin Li@end
40*67e74705SXin Li
41*67e74705SXin Li__attribute ((unavailable)) __attribute ((deprecated)) @protocol XProto; // expected-note{{marked unavailable}}
42*67e74705SXin Li
43*67e74705SXin Liid <XProto> idX = 0; // expected-error {{'XProto' is unavailable}}
44*67e74705SXin Li
45*67e74705SXin Liint main ()
46*67e74705SXin Li{
47*67e74705SXin Li	MyClass1 <MyProto1> *p1;  // expected-warning {{'MyProto1' is deprecated}}
48*67e74705SXin Li}
49*67e74705SXin Li
50