Daniel Dunbar | a572887 | 2009-12-15 20:14:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -pedantic -fsyntax-only -verify %s |
Fariborz Jahanian | 411f373 | 2007-12-19 17:45:58 +0000 | [diff] [blame] | 2 | |
| 3 | @protocol MyProto1 |
| 4 | @end |
| 5 | |
| 6 | @protocol MyProto2 |
| 7 | @end |
| 8 | |
| 9 | @interface INTF @end |
| 10 | |
Douglas Gregor | a41a8c5 | 2010-04-22 00:20:18 +0000 | [diff] [blame] | 11 | id<MyProto1> Func(INTF <MyProto1, MyProto2> *p2) // expected-note 2{{passing argument to parameter 'p2' here}} |
Fariborz Jahanian | 411f373 | 2007-12-19 17:45:58 +0000 | [diff] [blame] | 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 | { |
Douglas Gregor | d4eea83 | 2010-04-09 00:35:39 +0000 | [diff] [blame] | 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>'}} |
Fariborz Jahanian | 411f373 | 2007-12-19 17:45:58 +0000 | [diff] [blame] | 34 | } |
| 35 | |
| 36 | |
| 37 | |
| 38 | id<MyProto1> Gunc3(id <MyProto2>p2) |
| 39 | { |
Douglas Gregor | d4eea83 | 2010-04-09 00:35:39 +0000 | [diff] [blame] | 40 | return p2; // expected-warning {{returning 'id<MyProto2>' from a function with incompatible result type 'id<MyProto1>'}} |
Fariborz Jahanian | 411f373 | 2007-12-19 17:45:58 +0000 | [diff] [blame] | 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 | { |
Douglas Gregor | d4eea83 | 2010-04-09 00:35:39 +0000 | [diff] [blame] | 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> *'}} |
Fariborz Jahanian | 411f373 | 2007-12-19 17:45:58 +0000 | [diff] [blame] | 66 | } |
| 67 | |
| 68 | INTF<MyProto1> * Hunc3(id <MyProto2>p2) |
| 69 | { |
Douglas Gregor | d4eea83 | 2010-04-09 00:35:39 +0000 | [diff] [blame] | 70 | return p2; // expected-warning {{returning 'id<MyProto2>' from a function with incompatible result type 'INTF<MyProto1> *'}} |
Fariborz Jahanian | 411f373 | 2007-12-19 17:45:58 +0000 | [diff] [blame] | 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 | } |