Home | History | Annotate | Download | only in Rewriter
      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