95 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| // 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
 | |
| 
 |