1*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp 2*67e74705SXin Li// 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*67e74705SXin Li// rdar://11202764 4*67e74705SXin Li 5*67e74705SXin Litypedef void(^BL)(void); 6*67e74705SXin Li 7*67e74705SXin Liid return_id(void(^block)(void)) { 8*67e74705SXin Li return block; 9*67e74705SXin Li} 10*67e74705SXin Li 11*67e74705SXin LiBL return_block(id obj) { 12*67e74705SXin Li return obj; 13*67e74705SXin Li} 14*67e74705SXin Li 15*67e74705SXin Liint main() 16*67e74705SXin Li{ 17*67e74705SXin Li void(^block)(void); 18*67e74705SXin Li id obj; 19*67e74705SXin Li block = obj; // AnyPointerToBlockPointerCast 20*67e74705SXin Li obj = block; // BlockPointerToObjCPointerCast 21*67e74705SXin Li 22*67e74705SXin Li id obj1 = block; 23*67e74705SXin Li 24*67e74705SXin Li void(^block1)(void) = obj1; 25*67e74705SXin Li 26*67e74705SXin Li return_id(block1); 27*67e74705SXin Li 28*67e74705SXin Li return_id(obj1); 29*67e74705SXin Li 30*67e74705SXin Li return_block(block1); 31*67e74705SXin Li 32*67e74705SXin Li return_block(obj1); 33*67e74705SXin Li} 34