blob: 23029654c984fa3e83a75d7a54b71ca1ec08ad41 [file] [log] [blame]
Fariborz Jahanian104dbf92012-04-11 23:57:12 +00001// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
NAKAMURA Takumi9ff009f2012-05-01 10:52:06 +00002// 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
Fariborz Jahanian104dbf92012-04-11 23:57:12 +00003// rdar://11230308
4
Fariborz Jahanian8b08adb2012-05-03 21:44:12 +00005typedef unsigned long size_t;
Fariborz Jahanian104dbf92012-04-11 23:57:12 +00006typedef struct {
7 char byte0;
8 char byte1;
9} CFUUIDBytes;
10
11void x(void *);
12
13void y() {
14 __block CFUUIDBytes bytes;
15
16 void (^bar)() = ^{
17 x(&bytes);
18 };
19}
Fariborz Jahanian5ce28272012-04-12 16:33:31 +000020
21// rdar://11236342
22int foo() {
23 __block int hello;
Fariborz Jahaniand3a39f02012-04-25 18:11:57 +000024 return hello;
Fariborz Jahanian5ce28272012-04-12 16:33:31 +000025}
Fariborz Jahaniane6e96de2012-04-24 18:16:20 +000026
27// rdar://7547630
28// rewriting multiple __block decls on wintin same decl stmt.
Fariborz Jahaniand3a39f02012-04-25 18:11:57 +000029void radar7547630() {
Fariborz Jahaniane6e96de2012-04-24 18:16:20 +000030 __block int BI1, BI2;
31
32 __block float FLOAT1, FT2, FFFFFFFF3,
33 FFFXXX4;
34
35 __block void (^B)(), (^BB)();
36}
37
Fariborz Jahanian4fe261c2012-04-24 19:38:45 +000038// rewriting multiple __block decls on wintin same decl stmt
39// with initializers.
Fariborz Jahaniand3a39f02012-04-25 18:11:57 +000040int rdar7547630(const char *keybuf, const char *valuebuf) {
Fariborz Jahanian4fe261c2012-04-24 19:38:45 +000041 __block int BI1 = 1, BI2 = 2;
42
43 double __block BYREFVAR = 1.34, BYREFVAR_NO_INIT, BYREFVAR2 = 1.37;
44
45 __block const char *keys = keybuf, *values = valuebuf, *novalues;
Fariborz Jahaniand3a39f02012-04-25 18:11:57 +000046
47 return BI2;
Fariborz Jahanian4fe261c2012-04-24 19:38:45 +000048}
49
Fariborz Jahanian65a7c682012-04-26 23:20:25 +000050// rdar://11326988
51typedef struct _z {
52 int location;
53 int length;
54} z;
55
56z w(int loc, int len);
57
58@interface rdar11326988
59@end
60@implementation rdar11326988
61- (void)y:(int)options {
62 __attribute__((__blocks__(byref))) z firstRange = w(1, 0);
63 options &= ~(1 | 2);
64}
65@end