// RUN: %clang_cc1 -fsyntax-only -verify %s // expected-no-diagnostics #include <stddef.h> typedef struct objc_class *Class; typedef struct objc_object { Class isa; } *id; id objc_getClass(const char *s); @interface Object + self; @end @protocol Func + (void) class_func0; - (void) instance_func0; @end @interface Derived: Object <Func> @end @interface Derived2: Object <Func> @end static void doSomething(Class <Func> unsupportedObjectType) { [unsupportedObjectType class_func0]; } static void doSomethingElse(id <Func> pleaseConvertToThisType) { [pleaseConvertToThisType class_func0]; } int main(int argv, char *argc[]) { doSomething([Derived self]); doSomething([Derived2 self]); doSomethingElse([Derived self]); doSomethingElse([Derived2 self]); }