| // RUN: %clang_cc1 -fms-extensions -U__declspec -rewrite-objc -x objective-c++ -fblocks -o %t-rw.cpp %s |
| // RUN: %clang_cc1 -fsyntax-only -std=gnu++98 -Werror -Wno-address-of-temporary -Wno-attributes -D"Class=void*" -D"id=void*" -D"SEL=void*" -U__declspec -D"__declspec(X)=" %t-rw.cpp |
| // rdar://11131490 |
| |
| typedef unsigned long size_t; |
| extern "C" __declspec(dllexport) void BreakTheRewriter(void) { |
| __block int aBlockVariable = 0; |
| void (^aBlock)(void) = ^ { |
| aBlockVariable = 42; |
| }; |
| aBlockVariable++; |
| void (^bBlocks)(void) = ^ { |
| aBlockVariable = 43; |
| }; |
| void (^c)(void) = ^ { |
| aBlockVariable = 44; |
| }; |
| |
| } |
| __declspec(dllexport) extern "C" void AnotherBreakTheRewriter(int *p1, double d) { |
| |
| __block int bBlockVariable = 0; |
| void (^aBlock)(void) = ^ { |
| bBlockVariable = 42; |
| }; |
| bBlockVariable++; |
| void (^bBlocks)(void) = ^ { |
| bBlockVariable = 43; |
| }; |
| void (^c)(void) = ^ { |
| bBlockVariable = 44; |
| }; |
| |
| } |
| |
| int |
| |
| __declspec (dllexport) |
| |
| main (int argc, char *argv[]) |
| { |
| __block int bBlockVariable = 0; |
| void (^aBlock)(void) = ^ { |
| bBlockVariable = 42; |
| }; |
| } |
| |
| // rdar://11275241 |
| static char stringtype; |
| char CFStringGetTypeID(); |
| void x(void (^)()); |
| |
| static void initStatics(int arg, ...) { |
| x(^{ |
| stringtype = CFStringGetTypeID(); |
| }); |
| } |
| static void initStatics1(...) { |
| x(^{ |
| stringtype = CFStringGetTypeID(); |
| }); |
| } |
| static void initStatics2() { |
| x(^{ |
| stringtype = CFStringGetTypeID(); |
| }); |
| } |
| |
| // rdar://11314329 |
| static inline const void *auto_zone_base_pointer(void *zone, const void *ptr) { return 0; } |
| |
| @interface I |
| { |
| id list; |
| } |
| - (void) Meth; |
| // radar 7589385 use before definition |
| - (void) allObjects; |
| @end |
| |
| @implementation I |
| // radar 7589385 use before definition |
| - (void) allObjects { |
| __attribute__((__blocks__(byref))) id *listp; |
| |
| void (^B)(void) = ^(void) { |
| *listp++ = 0; |
| }; |
| |
| B(); |
| } |
| - (void) Meth { __attribute__((__blocks__(byref))) void ** listp = (void **)list; } |
| @end |
| |