blob: 8c2beee989c74d55cd2cf4db2c03e883868b7643 [file] [log] [blame]
Fariborz Jahanian957442d2007-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{
Chris Lattner005ed752008-01-04 18:04:52 +000032 Func(p2); // expected-error {{incompatible type passing 'id<MyProto1>', expected 'INTF<MyProto1,MyProto2> *'}}
Fariborz Jahanian957442d2007-12-19 17:45:58 +000033 return p2; // expected-error {{incompatible type returning 'id<MyProto1>', expected 'id<MyProto1,MyProto2>'}}
34}
35
36
37
38id<MyProto1> Gunc3(id <MyProto2>p2)
39{
40 return p2; // expected-error {{incompatible type returning 'id<MyProto2>', expected 'id<MyProto1>'}}
41}
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{
Chris Lattner005ed752008-01-04 18:04:52 +000064 Func(p2); // expected-error {{incompatible type passing 'id<MyProto1>', expected 'INTF<MyProto1,MyProto2> *'}}
Fariborz Jahanian957442d2007-12-19 17:45:58 +000065 return p2; // expected-error {{incompatible type returning 'id<MyProto1>', expected 'INTF<MyProto1,MyProto2> *'}}
66}
67
68INTF<MyProto1> * Hunc3(id <MyProto2>p2)
69{
70 return p2; // expected-error {{incompatible type returning 'id<MyProto2>', expected 'INTF<MyProto1> *'}}
71}
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}