1// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
2// RUN: %clang_cc1 -fsyntax-only -fblocks -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
3// rdar://11202764
4
5typedef void(^BL)(void);
6
7id return_id(void(^block)(void)) {
8  return block;
9}
10
11BL return_block(id obj) {
12  return obj;
13}
14
15int main()
16{
17    void(^block)(void);
18    id obj;
19    block = obj; // AnyPointerToBlockPointerCast
20    obj = block; // BlockPointerToObjCPointerCast
21
22   id obj1 = block;
23
24   void(^block1)(void) = obj1;
25
26   return_id(block1);
27
28   return_id(obj1);
29
30   return_block(block1);
31
32   return_block(obj1);
33}
34