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