150
|
1 // RUN: %clang_cc1 -pedantic -fsyntax-only -verify %s
|
|
2
|
|
3 @protocol MyProto1
|
|
4 @end
|
|
5
|
|
6 @protocol MyProto2
|
|
7 @end
|
|
8
|
|
9 @interface INTF @end
|
|
10
|
|
11 id<MyProto1> Func(INTF <MyProto1, MyProto2> *p2) // expected-note 2{{passing argument to parameter 'p2' here}}
|
|
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
|
|
30 id<MyProto1, MyProto2> Gunc2(id <MyProto1>p2)
|
|
31 {
|
|
32 Func(p2); // expected-warning {{passing 'id<MyProto1>' to parameter of incompatible type 'INTF<MyProto1,MyProto2> *'}}
|
|
33 return p2; // expected-warning {{returning 'id<MyProto1>' from a function with incompatible result type 'id<MyProto1,MyProto2>'}}
|
|
34 }
|
|
35
|
|
36
|
|
37
|
|
38 id<MyProto1> Gunc3(id <MyProto2>p2)
|
|
39 {
|
|
40 return p2; // expected-warning {{returning 'id<MyProto2>' from a function with incompatible result type 'id<MyProto1>'}}
|
|
41 }
|
|
42
|
|
43
|
|
44 id<MyProto1, MyProto2> Gunc4(id <MyProto2, MyProto1>p2)
|
|
45 {
|
|
46 return p2;
|
|
47 }
|
|
48
|
|
49
|
|
50
|
|
51 INTF<MyProto1> * Hunc(id <MyProto1, MyProto2>p2)
|
|
52 {
|
|
53 return p2;
|
|
54 }
|
|
55
|
|
56
|
|
57 INTF<MyProto1> * Hunc1(id <MyProto1, MyProto2>p2)
|
|
58 {
|
|
59 return p2;
|
|
60 }
|
|
61
|
|
62 INTF<MyProto1, MyProto2> * Hunc2(id <MyProto1>p2)
|
|
63 {
|
|
64 Func(p2); // expected-warning {{passing 'id<MyProto1>' to parameter of incompatible type 'INTF<MyProto1,MyProto2> *'}}
|
|
65 return p2; // expected-warning {{returning 'id<MyProto1>' from a function with incompatible result type 'INTF<MyProto1,MyProto2> *'}}
|
|
66 }
|
|
67
|
|
68 INTF<MyProto1> * Hunc3(id <MyProto2>p2)
|
|
69 {
|
|
70 return p2; // expected-warning {{returning 'id<MyProto2>' from a function with incompatible result type 'INTF<MyProto1> *'}}
|
|
71 }
|
|
72
|
|
73
|
|
74 INTF<MyProto1, MyProto2> * Hunc4(id <MyProto2, MyProto1>p2)
|
|
75 {
|
|
76 return p2;
|
|
77 }
|
|
78
|
|
79 id Iunc(id <MyProto1, MyProto2>p2)
|
|
80 {
|
|
81 return p2;
|
|
82 }
|
|
83
|
|
84
|
|
85 id<MyProto1> Iunc1(id p2)
|
|
86 {
|
|
87 return p2;
|
|
88 }
|
|
89
|
|
90 id<MyProto1, MyProto2> Iunc2(id p2)
|
|
91 {
|
|
92 Iunc(p2);
|
|
93 return p2;
|
|
94 }
|