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