blob: a4be20b4a5c59312813ba70fe5cf078edcd9658c [file] [log] [blame]
Fariborz Jahanian411f3732007-12-19 17:45:58 +00001// RUN: clang -pedantic -fsyntax-only -verify %s
2
3@protocol MyProto1
4@end
5
6@protocol MyProto2
7@end
8
9@interface INTF @end
10
11id<MyProto1> Func(INTF <MyProto1, MyProto2> *p2)
12{
13 return p2;
14}
15
16
17
18
19 id<MyProto1> Gunc(id <MyProto1, MyProto2>p2)
20{
21 return p2;
22}
23
24
25 id<MyProto1> Gunc1(id <MyProto1, MyProto2>p2)
26{
27 return p2;
28}
29
30id<MyProto1, MyProto2> Gunc2(id <MyProto1>p2)
31{
Steve Naroff39579072008-10-14 22:18:38 +000032 Func(p2); // expected-warning {{incompatible type passing 'id<MyProto1>', expected 'INTF<MyProto1,MyProto2> *'}}
33 return p2; // expected-warning {{incompatible type returning 'id<MyProto1>', expected 'id<MyProto1,MyProto2>'}}
Fariborz Jahanian411f3732007-12-19 17:45:58 +000034}
35
36
37
38id<MyProto1> Gunc3(id <MyProto2>p2)
39{
Steve Naroff39579072008-10-14 22:18:38 +000040 return p2; // expected-warning {{incompatible type returning 'id<MyProto2>', expected 'id<MyProto1>'}}
Fariborz Jahanian411f3732007-12-19 17:45:58 +000041}
42
43
44id<MyProto1, MyProto2> Gunc4(id <MyProto2, MyProto1>p2)
45{
46 return p2;
47}
48
49
50
51INTF<MyProto1> * Hunc(id <MyProto1, MyProto2>p2)
52{
53 return p2;
54}
55
56
57INTF<MyProto1> * Hunc1(id <MyProto1, MyProto2>p2)
58{
59 return p2;
60}
61
62INTF<MyProto1, MyProto2> * Hunc2(id <MyProto1>p2)
63{
Steve Naroff39579072008-10-14 22:18:38 +000064 Func(p2); // expected-warning {{incompatible type passing 'id<MyProto1>', expected 'INTF<MyProto1,MyProto2> *'}}
65 return p2; // expected-warning {{incompatible type returning 'id<MyProto1>', expected 'INTF<MyProto1,MyProto2> *'}}
Fariborz Jahanian411f3732007-12-19 17:45:58 +000066}
67
68INTF<MyProto1> * Hunc3(id <MyProto2>p2)
69{
Steve Naroff39579072008-10-14 22:18:38 +000070 return p2; // expected-warning {{incompatible type returning 'id<MyProto2>', expected 'INTF<MyProto1> *'}}
Fariborz Jahanian411f3732007-12-19 17:45:58 +000071}
72
73
74INTF<MyProto1, MyProto2> * Hunc4(id <MyProto2, MyProto1>p2)
75{
76 return p2;
77}
78
79id Iunc(id <MyProto1, MyProto2>p2)
80{
81 return p2;
82}
83
84
85id<MyProto1> Iunc1(id p2)
86{
87 return p2;
88}
89
90id<MyProto1, MyProto2> Iunc2(id p2)
91{
92 Iunc(p2);
93 return p2;
94}