1// RUN: %clang_cc1 -fsyntax-only -verify %s 2// rdar://9091389 3 4@protocol Fooable 5- (void)foo; 6@end 7 8@protocol SubFooable <Fooable> 9@end 10 11@interface AClass 12@end 13 14@interface BClass : AClass <SubFooable> 15@end 16 17@implementation BClass 18- (void)foo { 19} 20@end 21 22void functionTakingAClassConformingToAProtocol(AClass <Fooable> *instance) { // expected-note {{passing argument to parameter 'instance' here}} 23} 24 25int main () { 26 AClass *aobject = 0; 27 BClass *bobject = 0; 28 functionTakingAClassConformingToAProtocol(aobject); // expected-warning {{incompatible pointer types passing 'AClass *' to parameter of type 'AClass<Fooable> *'}} 29 functionTakingAClassConformingToAProtocol(bobject); // Shouldn't warn - does implement Fooable 30 return 0; 31} 32 33// rdar://9267196 34@interface NSObject @end 35 36@protocol MyProtocol 37@end 38 39@interface MyClass : NSObject 40{ 41} 42@end 43 44@implementation MyClass 45@end 46 47@interface MySubclass : MyClass <MyProtocol> 48{ 49} 50@end 51 52@interface MyTestClass : NSObject 53{ 54@private 55 NSObject <MyProtocol> *someObj; 56} 57 58@property (nonatomic, assign) NSObject <MyProtocol> *someObj; 59 60@end 61 62@implementation MyTestClass 63 64@synthesize someObj; 65 66- (void)someMethod 67{ 68 MySubclass *foo; 69 [self setSomeObj:foo]; // no warning here! 70} 71 72@end 73