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