xref: /aosp_15_r20/external/clang/test/Rewriter/rewrite-modern-block.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
2*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -Werror -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -U__declspec -D"__declspec(X)=" %t-rw.cpp
3*67e74705SXin Li// rdar://11230308
4*67e74705SXin Li
5*67e74705SXin Litypedef unsigned long size_t;
6*67e74705SXin Litypedef struct {
7*67e74705SXin Li    char byte0;
8*67e74705SXin Li    char byte1;
9*67e74705SXin Li} CFUUIDBytes;
10*67e74705SXin Li
11*67e74705SXin Livoid x(void *);
12*67e74705SXin Li
13*67e74705SXin Livoid y() {
14*67e74705SXin Li    __block CFUUIDBytes bytes;
15*67e74705SXin Li
16*67e74705SXin Li    void (^bar)() = ^{
17*67e74705SXin Li        x(&bytes);
18*67e74705SXin Li    };
19*67e74705SXin Li}
20*67e74705SXin Li
21*67e74705SXin Li// rdar://11236342
22*67e74705SXin Liint foo() {
23*67e74705SXin Li    __block int hello;
24*67e74705SXin Li    return hello;
25*67e74705SXin Li}
26*67e74705SXin Li
27*67e74705SXin Li// rdar://7547630
28*67e74705SXin Li// rewriting multiple __block decls on wintin same decl stmt.
29*67e74705SXin Livoid radar7547630() {
30*67e74705SXin Li  __block int BI1, BI2;
31*67e74705SXin Li
32*67e74705SXin Li  __block float FLOAT1, FT2, FFFFFFFF3,
33*67e74705SXin Li   FFFXXX4;
34*67e74705SXin Li
35*67e74705SXin Li  __block void (^B)(), (^BB)();
36*67e74705SXin Li}
37*67e74705SXin Li
38*67e74705SXin Li// rewriting multiple __block decls on wintin same decl stmt
39*67e74705SXin Li// with initializers.
40*67e74705SXin Liint  rdar7547630(const char *keybuf, const char *valuebuf) {
41*67e74705SXin Li  __block int BI1 = 1, BI2 = 2;
42*67e74705SXin Li
43*67e74705SXin Li  double __block BYREFVAR = 1.34, BYREFVAR_NO_INIT, BYREFVAR2 = 1.37;
44*67e74705SXin Li
45*67e74705SXin Li  __block const char *keys = keybuf, *values = valuebuf, *novalues;
46*67e74705SXin Li
47*67e74705SXin Li  return BI2;
48*67e74705SXin Li}
49*67e74705SXin Li
50*67e74705SXin Li// rdar://11326988
51*67e74705SXin Litypedef struct _z {
52*67e74705SXin Li    int location;
53*67e74705SXin Li    int length;
54*67e74705SXin Li} z;
55*67e74705SXin Li
56*67e74705SXin Liz w(int loc, int len);
57*67e74705SXin Li
58*67e74705SXin Li@interface rdar11326988
59*67e74705SXin Li@end
60*67e74705SXin Li@implementation rdar11326988
61*67e74705SXin Li- (void)y:(int)options {
62*67e74705SXin Li    __attribute__((__blocks__(byref))) z firstRange = w(1, 0);
63*67e74705SXin Li    options &= ~(1 | 2);
64*67e74705SXin Li}
65*67e74705SXin Li@end
66*67e74705SXin Li
67*67e74705SXin Li// rdar://18799145
68*67e74705SXin Liint Test18799145() { return ^(){return 0;}(); }
69