Files
llvm-project/clang/test/SemaObjC/conditional-expr-3.m
Steve Naroff 8afa98916a Downgrade incompatibilities with objc qualified types (e.g. id <P>) to warnings.
Note: One day, we should consider moving the actual diags to ObjCQualifiedIdTypesAreCompatible(), since it has more information on the actual problem. GCC currently emits slightly more instructive errors for some cases involving protocols. I added a FIXME to the code.

llvm-svn: 57529
2008-10-14 22:18:38 +00:00

64 lines
1012 B
Objective-C

// RUN: clang -fsyntax-only -verify %s
@protocol P0
@end
@protocol P1
@end
@protocol P2
@end
@interface A <P0>
@end
@interface B : A
@end
void bar(id x);
void barP0(id<P0> x);
void barP1(id<P1> x);
void barP2(id<P2> x);
void f0(A *a) {
id l = a;
}
void f1(id x, A *a) {
id<P0> l = a;
}
void f2(id<P1> x) {
id<P0> l = x; // expected-warning {{incompatible type initializing 'id<P1>', expected 'id<P0>'}}
}
void f3(A *a) {
id<P1> l = a; // expected-warning {{incompatible type initializing 'A *', expected 'id<P1>'}}
}
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<P0, P1>) x : a);
}
void f7(int cond, id x, A *a) {
bar(cond ? a : (id<P0, P1>) x);
}
void f8(int cond, id<P0,P1> x0, id<P0,P2> x1) {
barP0(cond ? x0 : x1);
}
void f9(int cond, id<P0,P1> x0, id<P0,P2> x1) {
barP1(cond ? x0 : x1);
}
void f10(int cond, id<P0,P1> x0, id<P0,P2> x1) {
barP2(cond ? x0 : x1);
}