diff options
Diffstat (limited to 'test/Rewriter/rewrite-modern-block.mm')
-rw-r--r-- | test/Rewriter/rewrite-modern-block.mm | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/test/Rewriter/rewrite-modern-block.mm b/test/Rewriter/rewrite-modern-block.mm index 8da723d..2302965 100644 --- a/test/Rewriter/rewrite-modern-block.mm +++ b/test/Rewriter/rewrite-modern-block.mm @@ -1,7 +1,8 @@ // RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp -// RUN: %clang_cc1 -fsyntax-only -Wno-address-of-temporary -D"Class=void*" -D"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp +// 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 // rdar://11230308 +typedef unsigned long size_t; typedef struct { char byte0; char byte1; @@ -20,4 +21,45 @@ void y() { // rdar://11236342 int foo() { __block int hello; + return hello; } + +// rdar://7547630 +// rewriting multiple __block decls on wintin same decl stmt. +void radar7547630() { + __block int BI1, BI2; + + __block float FLOAT1, FT2, FFFFFFFF3, + FFFXXX4; + + __block void (^B)(), (^BB)(); +} + +// rewriting multiple __block decls on wintin same decl stmt +// with initializers. +int rdar7547630(const char *keybuf, const char *valuebuf) { + __block int BI1 = 1, BI2 = 2; + + double __block BYREFVAR = 1.34, BYREFVAR_NO_INIT, BYREFVAR2 = 1.37; + + __block const char *keys = keybuf, *values = valuebuf, *novalues; + + return BI2; +} + +// rdar://11326988 +typedef struct _z { + int location; + int length; +} z; + +z w(int loc, int len); + +@interface rdar11326988 +@end +@implementation rdar11326988 +- (void)y:(int)options { + __attribute__((__blocks__(byref))) z firstRange = w(1, 0); + options &= ~(1 | 2); +} +@end |