34 lines
		
	
	
		
			741 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			741 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 %s -fblocks -triple x86_64-apple-darwin -emit-llvm -o - | FileCheck %s
 | |
| // rdar://8594790
 | |
| 
 | |
| extern "C" {
 | |
| extern "C" void *_Block_copy(const void *aBlock);
 | |
| extern "C" void _Block_release(const void *aBlock);
 | |
| }
 | |
| 
 | |
| class A {
 | |
| public:
 | |
|         int x;
 | |
|         A(const A &o);
 | |
|         A();
 | |
|         virtual ~A();
 | |
|         void hello() const;
 | |
| };
 | |
| 
 | |
| int
 | |
| main()
 | |
| {
 | |
|         A a;
 | |
|         void (^c)(void) = ((__typeof(^{ a.hello(); }))_Block_copy((const void *)(^{ a.hello(); })));
 | |
|         c();
 | |
|         _Block_release((const void *)(c));
 | |
|         return 0;
 | |
| }
 | |
| 
 | |
| // CHECK-LABEL: define internal void @__copy_helper_block_
 | |
| // CHECK: call void @_ZN1AC1ERKS_
 | |
| 
 | |
| 
 | |
| // CHECK-LABEL:define internal void @__destroy_helper_block_
 | |
| // CHECK: call void @_ZN1AD1Ev
 |