1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | // expected-no-diagnostics |
3 | |
4 | #include <stddef.h> |
5 | |
6 | typedef struct objc_class *Class; |
7 | typedef struct objc_object { |
8 | Class isa; |
9 | } *id; |
10 | id 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 | |
27 | static void doSomething(Class <Func> unsupportedObjectType) { |
28 | [unsupportedObjectType class_func0]; |
29 | } |
30 | |
31 | static void doSomethingElse(id <Func> pleaseConvertToThisType) { |
32 | [pleaseConvertToThisType class_func0]; |
33 | } |
34 | |
35 | int main(int argv, char *argc[]) { |
36 | doSomething([Derived self]); |
37 | doSomething([Derived2 self]); |
38 | doSomethingElse([Derived self]); |
39 | doSomethingElse([Derived2 self]); |
40 | } |
41 | |
42 | |