// RUN: %clang_cc1 -fsyntax-only -verify %s @protocol P0 @end @protocol P1 @end @protocol P2 @end @interface A @end @interface B : A @end void bar(id x); void barP0(id x); void barP1(id x); void barP2(id x); void f0(A *a) { id l = a; } void f1(id x, A *a) { id l = a; } void f2(id x) { id l = x; // expected-warning {{initializing 'id' with an expression of incompatible type 'id'}} } void f3(A *a) { id l = a; // expected-warning {{initializing 'id' with an expression of incompatible type 'A *'}} } void f4(int cond, id x, A *a) { bar(cond ? x : a); } void f5(int cond, A *a, B *b) { bar(cond ? a : b); } void f6(int cond, id x, A *a) { bar(cond ? (id) x : a); } void f7(int cond, id x, A *a) { bar(cond ? a : (id) x); } void f8(int cond, id x0, id x1) { barP0(cond ? x0 : x1); // expected-warning {{incompatible operand types ('id' and 'id')}} } void f9(int cond, id x0, id x1) { barP1(cond ? x0 : x1); // expected-warning {{incompatible operand types ('id' and 'id')}} } void f10(int cond, id x0, id x1) { barP2(cond ? x0 : x1); // expected-warning {{incompatible operand types ('id' and 'id')}} } int f11(int cond, A* a, B* b) { return (cond? b : a)->x; // expected-error{{'A' does not have a member named 'x'}} }