1 | // RUN: %clang_cc1 -fsyntax-only -verify -fblocks -Wno-objc-root-class %s |
2 | // radar 7562285 |
3 | |
4 | typedef int (^blocktype)(int a, int b); |
5 | |
6 | @interface A { |
7 | A* a; |
8 | id b; |
9 | Class c; |
10 | } |
11 | - (blocktype)Meth; |
12 | @end |
13 | |
14 | @implementation A |
15 | - (blocktype)Meth { |
16 | if (b) |
17 | return (blocktype)b; |
18 | else if (a) |
19 | return (blocktype)a; // expected-error {{C-style cast from 'A *' to 'blocktype' (aka 'int (^)(int, int)') is not allowed}} |
20 | else |
21 | return (blocktype)c; |
22 | } |
23 | @end |
24 | |
25 | @interface B { |
26 | blocktype a; |
27 | blocktype b; |
28 | blocktype c; |
29 | } |
30 | - (id)Meth; |
31 | @end |
32 | |
33 | @implementation B |
34 | - (id)Meth { |
35 | if (a) |
36 | return (A*)a; // expected-error {{C-style cast from 'blocktype' (aka 'int (^)(int, int)') to 'A *' is not allowed}} |
37 | if (b) |
38 | return (id)b; |
39 | if (c) |
40 | return (Class)b; |
41 | } |
42 | @end |
43 | |