// RUN: %clang_cc1  -fsyntax-only -verify %s

@protocol Fooable
- (void)foo;
@end

@protocol SubFooable <Fooable>
@end

@interface AClass
@end

@interface BClass : AClass <SubFooable>
@end

@implementation BClass
- (void)foo {
}
@end

void functionTakingAClassConformingToAProtocol(AClass <Fooable> *instance) { // expected-note {{passing argument to parameter 'instance' here}}
}

int main (void) {
    AClass *aobject = 0;
    BClass *bobject = 0;
    functionTakingAClassConformingToAProtocol(aobject);  // expected-warning {{incompatible pointer types passing 'AClass *' to parameter of type 'AClass<Fooable> *'}}
    functionTakingAClassConformingToAProtocol(bobject); // Shouldn't warn -  does implement Fooable
    return 0;
}

@interface NSObject @end

@protocol MyProtocol
@end

@interface MyClass : NSObject 
{
}
@end

@implementation MyClass
@end

@interface MySubclass : MyClass <MyProtocol> 
{
}
@end

@interface MyTestClass : NSObject
{
@private
	NSObject <MyProtocol> *someObj;
}

@property (nonatomic, assign) NSObject <MyProtocol> *someObj;

@end

@implementation MyTestClass

@synthesize someObj;

- (void)someMethod
{
	MySubclass *foo;
	[self setSomeObj:foo]; // no warning here!
}

@end
