// RUN: %clang_cc1 -fsyntax-only -verify %s #define nil (void *)0; extern void foo(); @protocol MyProtocolA - (void) methodA; @end @protocol MyProtocolB - (void) methodB; @end @protocol MyProtocolAB @end @protocol MyProtocolAC - (void) methodC; @end int main() { id obj_a = nil; id obj_b = nil; id obj_ab = nil; id obj_ac = nil; obj_a = obj_b; // expected-warning {{assigning to 'id' from incompatible type 'id'}} obj_a = obj_ab; /* Ok */ obj_a = obj_ac; /* Ok */ obj_b = obj_a; // expected-warning {{assigning to 'id' from incompatible type 'id'}} obj_b = obj_ab; /* Ok */ obj_b = obj_ac; // expected-warning {{assigning to 'id' from incompatible type 'id'}} obj_ab = obj_a; // expected-warning {{assigning to 'id' from incompatible type 'id'}} obj_ab = obj_b; // expected-warning {{assigning to 'id' from incompatible type 'id'}} obj_ab = obj_ac; // expected-warning {{assigning to 'id' from incompatible type 'id'}} obj_ac = obj_a; // expected-warning {{assigning to 'id' from incompatible type 'id'}} obj_ac = obj_b; // expected-warning {{assigning to 'id' from incompatible type 'id'}} obj_ac = obj_ab; // expected-warning {{assigning to 'id' from incompatible type 'id'}} if (obj_a == obj_b) foo (); // expected-warning {{comparison of distinct pointer types ('id' and 'id')}} if (obj_b == obj_a) foo (); // expected-warning {{comparison of distinct pointer types ('id' and 'id')}} if (obj_a == obj_ab) foo (); /* Ok */ if (obj_ab == obj_a) foo (); /* Ok */ if (obj_a == obj_ac) foo (); /* Ok */ if (obj_ac == obj_a) foo (); /* Ok */ if (obj_b == obj_ab) foo (); /* Ok */ if (obj_ab == obj_b) foo (); /* Ok */ if (obj_b == obj_ac) foo (); // expected-warning {{comparison of distinct pointer types ('id' and 'id')}} if (obj_ac == obj_b) foo (); // expected-warning {{comparison of distinct pointer types ('id' and 'id')}} if (obj_ab == obj_ac) foo (); // expected-warning {{comparison of distinct pointer types ('id' and 'id')}} if (obj_ac == obj_ab) foo (); // expected-warning {{comparison of distinct pointer types ('id' and 'id')}} return 0; }