blob: abb2f136183c7a8a4fd0a1d70a4e3e847da75760 [file] [log] [blame]
Fariborz Jahanian52b2e1e2010-02-12 17:52:31 +00001// RUN: %clang_cc1 -x objective-c++ -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
Fariborz Jahanian264e1592010-02-16 22:13:48 +00002// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
Fariborz Jahanian52b2e1e2010-02-12 17:52:31 +00003// radar 7638400
4
Fariborz Jahanian264e1592010-02-16 22:13:48 +00005typedef void * id;
Fariborz Jahanian86aa9fd2010-02-24 01:25:40 +00006void *sel_registerName(const char *);
Fariborz Jahanian264e1592010-02-16 22:13:48 +00007
Fariborz Jahanian52b2e1e2010-02-12 17:52:31 +00008@interface X
9@end
10
11void foo(void (^block)(int));
12
13@implementation X
14static void enumerateIt(void (^block)(id, id, char *)) {
15 foo(^(int idx) { });
16}
17@end
18
Fariborz Jahanian210c2482010-02-16 17:26:03 +000019// radar 7651312
20void apply(void (^block)(int));
21
22static void x(int (^cmp)(int, int)) {
23 x(cmp);
24}
25
26static void y(int (^cmp)(int, int)) {
27 apply(^(int sect) {
28 x(cmp);
29 });
30}
Fariborz Jahanianafad76f2010-02-18 01:20:22 +000031
32// radar 7659483
33void *_Block_copy(const void *aBlock);
34void x(void (^block)(void)) {
35 block = ((__typeof(block))_Block_copy((const void *)(block)));
36}
Fariborz Jahanian86aa9fd2010-02-24 01:25:40 +000037
Fariborz Jahanian170ee0c2010-02-24 01:37:04 +000038// radar 7682763
Fariborz Jahanian86aa9fd2010-02-24 01:25:40 +000039@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
Fariborz Jahaniane985d012010-11-03 23:29:24 +000061// rdar: //8608902
62@protocol CoreDAVAccountInfoProvider;
63@protocol CodeProvider;
64typedef void (^BDVDiscoveryCompletionHandler)(int success, id<CoreDAVAccountInfoProvider> discoveredInfo);
65typedef void (^BDVDiscoveryCompletion)(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo);
66typedef void (^BDVDiscovery)(int success);
67typedef void (^BDVDisc)(id<CoreDAVAccountInfoProvider> discoveredInfo, id<CodeProvider> codeInfo,
68 int success, id<CoreDAVAccountInfoProvider, CodeProvider> Info);
69typedef void (^BLOCK)(id, id<CoreDAVAccountInfoProvider>, id<CodeProvider> codeInfo);
70typedef void (^EMPTY_BLOCK)();
71typedef void (^ BDVDiscoveryCompletion1 )(id<CodeProvider> codeInfo, int success, id<CoreDAVAccountInfoProvider> discoveredInfo);
72
73void (^BL)(void(^arg1)(), int i1, void(^arg)(int));
74
75typedef void (^iscoveryCompletionHandler)(void(^arg1)(), id<CoreDAVAccountInfoProvider> discoveredInfo);
76
77typedef 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
Fariborz Jahanian06de2cf2010-11-03 23:50:34 +000081
82@interface I @end
83@interface INTF @end
84void (^BLINT)(I<CoreDAVAccountInfoProvider>* ARG, INTF<CodeProvider, CoreDAVAccountInfoProvider>* ARG1);
Fariborz Jahanian8188e5f2010-11-05 18:34:46 +000085
86void test8608902() {
87 BDVDiscoveryCompletionHandler ppp;
88 ppp(1, 0);
89}
90