Home | History | Annotate | Download | only in Rewriter
      1 // RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %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 // radar 7638400
      4 
      5 typedef void * id;
      6 void *sel_registerName(const char *);
      7 
      8 @interface X
      9 @end
     10 
     11 void foo(void (^block)(int));
     12 
     13 @implementation X
     14 static void enumerateIt(void (^block)(id, id, char *)) {
     15       foo(^(int idx) { });
     16 }
     17 @end
     18 
     19 // radar 7651312
     20 void apply(void (^block)(int));
     21 
     22 static void x(int (^cmp)(int, int)) {
     23 	x(cmp);
     24 }
     25 
     26 static void y(int (^cmp)(int, int)) {
     27 	apply(^(int sect) {
     28 		x(cmp);
     29     });
     30 }
     31 
     32 // radar 7659483
     33 void *_Block_copy(const void *aBlock);
     34 void x(void (^block)(void)) {
     35         block = ((__typeof(block))_Block_copy((const void *)(block)));
     36 }
     37 
     38 // radar 7682763
     39 @interface Y {
     40 @private
     41     id _private;
     42 }
     43 - (void (^)(void))f;
     44 @end
     45 
     46 typedef 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 // rdar: //8608902
     62 @protocol CoreDAVAccountInfoProvider;
     63 @protocol CodeProvider;
     64 typedef void (^BDVDiscoveryCompletionHandler)(int success, id<CoreDAVAccountInfoProvider> discoveredInfo);
     65 typedef void (^BDVDiscoveryCompletion)(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo);
     66 typedef void (^BDVDiscovery)(int success);
     67 typedef void (^BDVDisc)(id<CoreDAVAccountInfoProvider> discoveredInfo, id<CodeProvider> codeInfo, 
     68                         int success, id<CoreDAVAccountInfoProvider, CodeProvider> Info);
     69 typedef void (^BLOCK)(id, id<CoreDAVAccountInfoProvider>, id<CodeProvider> codeInfo);
     70 typedef void (^EMPTY_BLOCK)();
     71 typedef void (^  BDVDiscoveryCompletion1  )(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo);
     72 
     73 void (^BL)(void(^arg1)(), int i1, void(^arg)(int));
     74 
     75 typedef void (^iscoveryCompletionHandler)(void(^arg1)(), id<CoreDAVAccountInfoProvider> discoveredInfo);
     76 
     77 typedef void (^DVDisc)(id<CoreDAVAccountInfoProvider> discoveredInfo, id<CodeProvider> codeInfo,
     78 			void(^arg1)(), int i1, void(^arg)(id<CoreDAVAccountInfoProvider>),
     79                         int success, id<CoreDAVAccountInfoProvider, CodeProvider> Info);
     80 
     81 
     82 @interface I @end
     83 @interface INTF @end
     84 void (^BLINT)(I<CoreDAVAccountInfoProvider>* ARG, INTF<CodeProvider, CoreDAVAccountInfoProvider>* ARG1);
     85 
     86 void  test8608902() {
     87   BDVDiscoveryCompletionHandler ppp;
     88   ppp(1, 0);
     89 }
     90 
     91 void test9204669() {
     92    __attribute__((__blocks__(byref))) char (^addChangeToData)();
     93 
     94    addChangeToData = ^() {
     95       return 'b';
     96    };
     97    addChangeToData();
     98 }
     99 
    100 void test9204669_1() {
    101    __attribute__((__blocks__(byref))) void (^addChangeToData)();
    102 
    103    addChangeToData = ^() {
    104     addChangeToData();
    105    };
    106 }
    107 
    108