18fbe78f6SDaniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2*c6e68daaSAndy Gibbs// expected-no-diagnostics 3ebc790d4SSteve Naroff 4ebc790d4SSteve Naroff#include <stddef.h> 5ebc790d4SSteve Naroff 6ebc790d4SSteve Narofftypedef struct objc_class *Class; 7ebc790d4SSteve Narofftypedef struct objc_object { 8ebc790d4SSteve Naroff Class isa; 9ebc790d4SSteve Naroff} *id; 10ebc790d4SSteve Naroffid objc_getClass(const char *s); 11ebc790d4SSteve Naroff 12ebc790d4SSteve Naroff@interface Object 13ebc790d4SSteve Naroff+ self; 14ebc790d4SSteve Naroff@end 15ebc790d4SSteve Naroff 16ebc790d4SSteve Naroff@protocol Func 17ebc790d4SSteve Naroff+ (void) class_func0; 18ebc790d4SSteve Naroff- (void) instance_func0; 19ebc790d4SSteve Naroff@end 20ebc790d4SSteve Naroff 21ebc790d4SSteve Naroff@interface Derived: Object <Func> 22ebc790d4SSteve Naroff@end 23ebc790d4SSteve Naroff 24ebc790d4SSteve Naroff@interface Derived2: Object <Func> 25ebc790d4SSteve Naroff@end 26ebc790d4SSteve Naroff 2751d4f79fSSteve Naroffstatic void doSomething(Class <Func> unsupportedObjectType) { 28ebc790d4SSteve Naroff [unsupportedObjectType class_func0]; 29ebc790d4SSteve Naroff} 30ebc790d4SSteve Naroff 31ebc790d4SSteve Naroffstatic void doSomethingElse(id <Func> pleaseConvertToThisType) { 32ebc790d4SSteve Naroff [pleaseConvertToThisType class_func0]; 33ebc790d4SSteve Naroff} 34ebc790d4SSteve Naroff 35ebc790d4SSteve Naroffint main(int argv, char *argc[]) { 36ebc790d4SSteve Naroff doSomething([Derived self]); 37ebc790d4SSteve Naroff doSomething([Derived2 self]); 38ebc790d4SSteve Naroff doSomethingElse([Derived self]); 39ebc790d4SSteve Naroff doSomethingElse([Derived2 self]); 40ebc790d4SSteve Naroff} 41ebc790d4SSteve Naroff 42