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