95 lines · plain
1// RUN: %clang_cc1 -pedantic -fsyntax-only -verify %s2 3@protocol MyProto1 4@end5 6@protocol MyProto2 7@end8 9@interface INTF @end10 11id<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 30id<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 38id<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 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{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 68INTF<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 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}95