|  | // RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp | 
|  | // 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 | 
|  |  | 
|  | typedef void(^BL)(void); | 
|  |  | 
|  | id return_id(void(^block)(void)) { | 
|  | return block; | 
|  | } | 
|  |  | 
|  | BL return_block(id obj) { | 
|  | return obj; | 
|  | } | 
|  |  | 
|  | int main() | 
|  | { | 
|  | void(^block)(void); | 
|  | id obj; | 
|  | block = obj; // AnyPointerToBlockPointerCast | 
|  | obj = block; // BlockPointerToObjCPointerCast | 
|  |  | 
|  | id obj1 = block; | 
|  |  | 
|  | void(^block1)(void) = obj1; | 
|  |  | 
|  | return_id(block1); | 
|  |  | 
|  | return_id(obj1); | 
|  |  | 
|  | return_block(block1); | 
|  |  | 
|  | return_block(obj1); | 
|  | } |