1 // RUN: %clang_cc1 %s -fblocks -triple x86_64-apple-darwin -emit-llvm -o - | FileCheck %s
2 // rdar://8594790
3 
4 extern "C" {
5 extern "C" void *_Block_copy(const void *aBlock);
6 extern "C" void _Block_release(const void *aBlock);
7 }
8 
9 class A {
10 public:
11         int x;
12         A(const A &o);
13         A();
14         virtual ~A();
15         void hello() const;
16 };
17 
18 int
main()19 main()
20 {
21         A a;
22         void (^c)(void) = ((__typeof(^{ a.hello(); }))_Block_copy((const void *)(^{ a.hello(); })));
23         c();
24         _Block_release((const void *)(c));
25         return 0;
26 }
27 
28 // CHECK-LABEL: define internal void @__copy_helper_block_
29 // CHECK: call void @_ZN1AC1ERKS_
30 
31 
32 // CHECK-LABEL:define internal void @__destroy_helper_block_
33 // CHECK: call void @_ZN1AD1Ev
34