1// RUN: clang-cc -fnext-runtime -emit-llvm %s -o %t 2 3void p(const char*, ...); 4 5@interface Root 6-(int) conformsTo: (id) x; 7@end 8 9@protocol P0; 10 11@protocol P1 12+(void) classMethodReq0; 13-(void) methodReq0; 14@optional 15+(void) classMethodOpt1; 16-(void) methodOpt1; 17@required 18+(void) classMethodReq2; 19-(void) methodReq2; 20@end 21 22@protocol P2 23//@property(readwrite) int x; 24@end 25 26@protocol P3<P1, P2> 27-(id <P1>) print0; 28-(void) print1; 29@end 30 31void foo(const id a) { 32 void *p = @protocol(P3); 33} 34 35int main() { 36 Protocol *P0 = @protocol(P0); 37 Protocol *P1 = @protocol(P1); 38 Protocol *P2 = @protocol(P2); 39 Protocol *P3 = @protocol(P3); 40 41#define Pbool(X) p(#X ": %s\n", X ? "yes" : "no"); 42 Pbool([P0 conformsTo: P1]); 43 Pbool([P1 conformsTo: P0]); 44 Pbool([P1 conformsTo: P2]); 45 Pbool([P2 conformsTo: P1]); 46 Pbool([P3 conformsTo: P1]); 47 Pbool([P1 conformsTo: P3]); 48 49 return 0; 50} 51