forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			43 lines
		
	
	
		
			913 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			913 B
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o %t -fblocks
 | |
| void (^f)(void) = ^{};
 | |
| 
 | |
| // rdar://6768379
 | |
| int f0(int (^a0)()) {
 | |
|   return a0(1, 2, 3);
 | |
| }
 | |
| 
 | |
| // Verify that attributes on blocks are set correctly.
 | |
| typedef struct s0 T;
 | |
| struct s0 {
 | |
|   int a[64];
 | |
| };
 | |
| 
 | |
| // RUN: grep 'internal void @__f2_block_invoke_0(.struct.s0\* sret .*, .*, .* byval .*)' %t
 | |
| struct s0 f2(struct s0 a0) {
 | |
|   return ^(struct s0 a1){ return a1; }(a0);
 | |
| }
 | |
| 
 | |
| // This should not crash: rdar://6808051
 | |
| void *P = ^{
 | |
|   void *Q = __func__;
 | |
| };
 | |
| 
 | |
| void (^test1)(void) = ^(void) {
 | |
|   __block int i;
 | |
|   ^ { i = 1; }();
 | |
| };
 | |
| 
 | |
| typedef double ftype(double);
 | |
| // It's not clear that we *should* support this syntax, but until that decision
 | |
| // is made, we should support it properly and not crash.
 | |
| ftype ^test2 = ^ftype {
 | |
|   return 0;
 | |
| };
 | |
| 
 | |
| // rdar://problem/8605032
 | |
| void f3_helper(void (^)(void));
 | |
| void f3() {
 | |
|   _Bool b = 0;
 | |
|   f3_helper(^{ if (b) {} });
 | |
| }
 |