1// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc -fobjc-fragile-abi %s -o %t-rw.cpp 2// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp 3// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-modern-rw.cpp 4// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-modern-rw.cpp 5// radar 7638400 6 7typedef void * id; 8void *sel_registerName(const char *); 9 10@interface X 11@end 12 13void foo(void (^block)(int)); 14 15@implementation X 16static void enumerateIt(void (^block)(id, id, char *)) { 17 foo(^(int idx) { }); 18} 19@end 20 21// radar 7651312 22void apply(void (^block)(int)); 23 24static void x(int (^cmp)(int, int)) { 25 x(cmp); 26} 27 28static void y(int (^cmp)(int, int)) { 29 apply(^(int sect) { 30 x(cmp); 31 }); 32} 33 34// radar 7659483 35void *_Block_copy(const void *aBlock); 36void x(void (^block)(void)) { 37 block = ((__typeof(block))_Block_copy((const void *)(block))); 38} 39 40// radar 7682763 41@interface Y { 42@private 43 id _private; 44} 45- (void (^)(void))f; 46@end 47 48typedef void (^void_block_t)(void); 49 50@interface YY { 51 void_block_t __completion; 52} 53@property (copy) void_block_t f; 54@end 55 56@implementation Y 57- (void (^)(void))f { 58 return [_private f]; 59} 60 61@end 62 63// rdar: //8608902 64@protocol CoreDAVAccountInfoProvider; 65@protocol CodeProvider; 66typedef void (^BDVDiscoveryCompletionHandler)(int success, id<CoreDAVAccountInfoProvider> discoveredInfo); 67typedef void (^BDVDiscoveryCompletion)(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo); 68typedef void (^BDVDiscovery)(int success); 69typedef void (^BDVDisc)(id<CoreDAVAccountInfoProvider> discoveredInfo, id<CodeProvider> codeInfo, 70 int success, id<CoreDAVAccountInfoProvider, CodeProvider> Info); 71typedef void (^BLOCK)(id, id<CoreDAVAccountInfoProvider>, id<CodeProvider> codeInfo); 72typedef void (^EMPTY_BLOCK)(); 73typedef void (^ BDVDiscoveryCompletion1 )(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo); 74 75void (^BL)(void(^arg1)(), int i1, void(^arg)(int)); 76 77typedef void (^iscoveryCompletionHandler)(void(^arg1)(), id<CoreDAVAccountInfoProvider> discoveredInfo); 78 79typedef void (^DVDisc)(id<CoreDAVAccountInfoProvider> discoveredInfo, id<CodeProvider> codeInfo, 80 void(^arg1)(), int i1, void(^arg)(id<CoreDAVAccountInfoProvider>), 81 int success, id<CoreDAVAccountInfoProvider, CodeProvider> Info); 82 83 84@interface I @end 85@interface INTF @end 86void (^BLINT)(I<CoreDAVAccountInfoProvider>* ARG, INTF<CodeProvider, CoreDAVAccountInfoProvider>* ARG1); 87 88void test8608902() { 89 BDVDiscoveryCompletionHandler ppp; 90 ppp(1, 0); 91} 92 93void test9204669() { 94 __attribute__((__blocks__(byref))) char (^addChangeToData)(); 95 96 addChangeToData = ^() { 97 return 'b'; 98 }; 99 addChangeToData(); 100} 101 102void test9204669_1() { 103 __attribute__((__blocks__(byref))) void (^addChangeToData)(); 104 105 addChangeToData = ^() { 106 addChangeToData(); 107 }; 108} 109 110