xref: /aosp_15_r20/external/clang/test/SemaObjC/protocol-id-test-3.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -pedantic -fsyntax-only -verify %s
2*67e74705SXin Li
3*67e74705SXin Li@protocol MyProto1
4*67e74705SXin Li@end
5*67e74705SXin Li
6*67e74705SXin Li@protocol MyProto2
7*67e74705SXin Li@end
8*67e74705SXin Li
9*67e74705SXin Li@interface INTF @end
10*67e74705SXin Li
11*67e74705SXin Liid<MyProto1> Func(INTF <MyProto1, MyProto2> *p2) // expected-note 2{{passing argument to parameter 'p2' here}}
12*67e74705SXin Li{
13*67e74705SXin Li	return p2;
14*67e74705SXin Li}
15*67e74705SXin Li
16*67e74705SXin Li
17*67e74705SXin Li
18*67e74705SXin Li
19*67e74705SXin Li id<MyProto1> Gunc(id <MyProto1, MyProto2>p2)
20*67e74705SXin Li{
21*67e74705SXin Li	return p2;
22*67e74705SXin Li}
23*67e74705SXin Li
24*67e74705SXin Li
25*67e74705SXin Li id<MyProto1> Gunc1(id <MyProto1, MyProto2>p2)
26*67e74705SXin Li{
27*67e74705SXin Li	return p2;
28*67e74705SXin Li}
29*67e74705SXin Li
30*67e74705SXin Liid<MyProto1, MyProto2> Gunc2(id <MyProto1>p2)
31*67e74705SXin Li{
32*67e74705SXin Li	Func(p2);	// expected-warning {{passing 'id<MyProto1>' to parameter of incompatible type 'INTF<MyProto1,MyProto2> *'}}
33*67e74705SXin Li	return p2;	// expected-warning {{returning 'id<MyProto1>' from a function with incompatible result type 'id<MyProto1,MyProto2>'}}
34*67e74705SXin Li}
35*67e74705SXin Li
36*67e74705SXin Li
37*67e74705SXin Li
38*67e74705SXin Liid<MyProto1> Gunc3(id <MyProto2>p2)
39*67e74705SXin Li{
40*67e74705SXin Li	return p2;	 // expected-warning {{returning 'id<MyProto2>' from a function with incompatible result type 'id<MyProto1>'}}
41*67e74705SXin Li}
42*67e74705SXin Li
43*67e74705SXin Li
44*67e74705SXin Liid<MyProto1, MyProto2> Gunc4(id <MyProto2, MyProto1>p2)
45*67e74705SXin Li{
46*67e74705SXin Li	return p2;
47*67e74705SXin Li}
48*67e74705SXin Li
49*67e74705SXin Li
50*67e74705SXin Li
51*67e74705SXin LiINTF<MyProto1> * Hunc(id <MyProto1, MyProto2>p2)
52*67e74705SXin Li{
53*67e74705SXin Li	return p2;
54*67e74705SXin Li}
55*67e74705SXin Li
56*67e74705SXin Li
57*67e74705SXin LiINTF<MyProto1> * Hunc1(id <MyProto1, MyProto2>p2)
58*67e74705SXin Li{
59*67e74705SXin Li	return p2;
60*67e74705SXin Li}
61*67e74705SXin Li
62*67e74705SXin LiINTF<MyProto1, MyProto2> * Hunc2(id <MyProto1>p2)
63*67e74705SXin Li{
64*67e74705SXin Li	Func(p2);	// expected-warning {{passing 'id<MyProto1>' to parameter of incompatible type 'INTF<MyProto1,MyProto2> *'}}
65*67e74705SXin Li	return p2;	// expected-warning {{returning 'id<MyProto1>' from a function with incompatible result type 'INTF<MyProto1,MyProto2> *'}}
66*67e74705SXin Li}
67*67e74705SXin Li
68*67e74705SXin LiINTF<MyProto1> * Hunc3(id <MyProto2>p2)
69*67e74705SXin Li{
70*67e74705SXin Li	return p2;	 // expected-warning {{returning 'id<MyProto2>' from a function with incompatible result type 'INTF<MyProto1> *'}}
71*67e74705SXin Li}
72*67e74705SXin Li
73*67e74705SXin Li
74*67e74705SXin LiINTF<MyProto1, MyProto2> * Hunc4(id <MyProto2, MyProto1>p2)
75*67e74705SXin Li{
76*67e74705SXin Li	return p2;
77*67e74705SXin Li}
78*67e74705SXin Li
79*67e74705SXin Liid Iunc(id <MyProto1, MyProto2>p2)
80*67e74705SXin Li{
81*67e74705SXin Li	return p2;
82*67e74705SXin Li}
83*67e74705SXin Li
84*67e74705SXin Li
85*67e74705SXin Liid<MyProto1> Iunc1(id p2)
86*67e74705SXin Li{
87*67e74705SXin Li	return p2;
88*67e74705SXin Li}
89*67e74705SXin Li
90*67e74705SXin Liid<MyProto1, MyProto2> Iunc2(id p2)
91*67e74705SXin Li{
92*67e74705SXin Li	Iunc(p2);
93*67e74705SXin Li	return p2;
94*67e74705SXin Li}
95