| // 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 | 
 |  | 
 | 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; | 
 |         }; | 
 | } | 
 |  | 
 | 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(); | 
 |     }); | 
 | } | 
 |  | 
 | static inline const void *auto_zone_base_pointer(void *zone, const void *ptr) { return 0; } | 
 |  | 
 | @interface I | 
 | { | 
 |    id list; | 
 | } | 
 | - (void) Meth; | 
 | // use before definition | 
 | - (void) allObjects; | 
 | @end | 
 |  | 
 | @implementation I | 
 | // 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 | 
 |  |