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