// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp // RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp // radar 7638400 typedef void * id; void *sel_registerName(const char *); @interface X @end void foo(void (^block)(int)); @implementation X static void enumerateIt(void (^block)(id, id, char *)) { foo(^(int idx) { }); } @end // radar 7651312 void apply(void (^block)(int)); static void x(int (^cmp)(int, int)) { x(cmp); } static void y(int (^cmp)(int, int)) { apply(^(int sect) { x(cmp); }); } // radar 7659483 void *_Block_copy(const void *aBlock); void x(void (^block)(void)) { block = ((__typeof(block))_Block_copy((const void *)(block))); } // radar 7682763 @interface Y { @private id _private; } - (void (^)(void))f; @end typedef void (^void_block_t)(void); @interface YY { void_block_t __completion; } @property (copy) void_block_t f; @end @implementation Y - (void (^)(void))f { return [_private f]; } @end