xref: /aosp_15_r20/external/clang/test/CodeGenObjC/protocols.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -emit-llvm-only %s
2*67e74705SXin Li
3*67e74705SXin Livoid p(const char*, ...);
4*67e74705SXin Li
5*67e74705SXin Li@interface Root
6*67e74705SXin Li+(int) maxValue;
7*67e74705SXin Li-(int) conformsTo: (id) x;
8*67e74705SXin Li@end
9*67e74705SXin Li
10*67e74705SXin Li@protocol P0;
11*67e74705SXin Li
12*67e74705SXin Li@protocol P1
13*67e74705SXin Li+(void) classMethodReq0;
14*67e74705SXin Li-(void) methodReq0;
15*67e74705SXin Li@optional
16*67e74705SXin Li+(void) classMethodOpt1;
17*67e74705SXin Li-(void) methodOpt1;
18*67e74705SXin Li@required
19*67e74705SXin Li+(void) classMethodReq2;
20*67e74705SXin Li-(void) methodReq2;
21*67e74705SXin Li@end
22*67e74705SXin Li
23*67e74705SXin Li@protocol P2
24*67e74705SXin Li//@property(readwrite) int x;
25*67e74705SXin Li@end
26*67e74705SXin Li
27*67e74705SXin Li@protocol P3<P1, P2>
28*67e74705SXin Li-(id <P1>) print0;
29*67e74705SXin Li-(void) print1;
30*67e74705SXin Li@end
31*67e74705SXin Li
32*67e74705SXin Livoid foo(const id a) {
33*67e74705SXin Li  void *p = @protocol(P3);
34*67e74705SXin Li}
35*67e74705SXin Li
36*67e74705SXin Liint main() {
37*67e74705SXin Li  Protocol *P0 = @protocol(P0);
38*67e74705SXin Li  Protocol *P1 = @protocol(P1);
39*67e74705SXin Li  Protocol *P2 = @protocol(P2);
40*67e74705SXin Li  Protocol *P3 = @protocol(P3);
41*67e74705SXin Li
42*67e74705SXin Li#define Pbool(X) p(#X ": %s\n", X ? "yes" : "no");
43*67e74705SXin Li  Pbool([P0 conformsTo: P1]);
44*67e74705SXin Li  Pbool([P1 conformsTo: P0]);
45*67e74705SXin Li  Pbool([P1 conformsTo: P2]);
46*67e74705SXin Li  Pbool([P2 conformsTo: P1]);
47*67e74705SXin Li  Pbool([P3 conformsTo: P1]);
48*67e74705SXin Li  Pbool([P1 conformsTo: P3]);
49*67e74705SXin Li
50*67e74705SXin Li  return 0;
51*67e74705SXin Li}
52*67e74705SXin Li
53*67e74705SXin Li// rdar://problem/7992749
54*67e74705SXin Litypedef Root<P1> P1Object;
55*67e74705SXin Liint test10() {
56*67e74705SXin Li  return [P1Object maxValue];
57*67e74705SXin Li}
58