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 7 typedef void * id; 8 void *sel_registerName(const char *); 9 10 @interface X 11 @end 12 13 void foo(void (^block)(int)); 14 15 @implementation X 16 static void enumerateIt(void (^block)(id, id, char *)) { 17 foo(^(int idx) { }); 18 } 19 @end 20 21 // radar 7651312 22 void apply(void (^block)(int)); 23 24 static void x(int (^cmp)(int, int)) { 25 x(cmp); 26 } 27 28 static void y(int (^cmp)(int, int)) { 29 apply(^(int sect) { 30 x(cmp); 31 }); 32 } 33 34 // radar 7659483 35 void *_Block_copy(const void *aBlock); 36 void 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 48 typedef 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; 66 typedef void (^BDVDiscoveryCompletionHandler)(int success, id<CoreDAVAccountInfoProvider> discoveredInfo); 67 typedef void (^BDVDiscoveryCompletion)(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo); 68 typedef void (^BDVDiscovery)(int success); 69 typedef void (^BDVDisc)(id<CoreDAVAccountInfoProvider> discoveredInfo, id<CodeProvider> codeInfo, 70 int success, id<CoreDAVAccountInfoProvider, CodeProvider> Info); 71 typedef void (^BLOCK)(id, id<CoreDAVAccountInfoProvider>, id<CodeProvider> codeInfo); 72 typedef void (^EMPTY_BLOCK)(); 73 typedef void (^ BDVDiscoveryCompletion1 )(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo); 74 75 void (^BL)(void(^arg1)(), int i1, void(^arg)(int)); 76 77 typedef void (^iscoveryCompletionHandler)(void(^arg1)(), id<CoreDAVAccountInfoProvider> discoveredInfo); 78 79 typedef 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 86 void (^BLINT)(I<CoreDAVAccountInfoProvider>* ARG, INTF<CodeProvider, CoreDAVAccountInfoProvider>* ARG1); 87 88 void test8608902() { 89 BDVDiscoveryCompletionHandler ppp; 90 ppp(1, 0); 91 } 92 93 void test9204669() { 94 __attribute__((__blocks__(byref))) char (^addChangeToData)(); 95 96 addChangeToData = ^() { 97 return 'b'; 98 }; 99 addChangeToData(); 100 } 101 102 void test9204669_1() { 103 __attribute__((__blocks__(byref))) void (^addChangeToData)(); 104 105 addChangeToData = ^() { 106 addChangeToData(); 107 }; 108 } 109 110