150
|
1 // RUN: %clang_cc1 %s -std=c++11 -emit-llvm -triple %itanium_abi_triple -o - -fblocks -fexceptions | FileCheck %s
|
|
2 // rdar://8594790
|
|
3
|
|
4 struct A {
|
|
5 int x;
|
|
6 A(const A &);
|
|
7 A();
|
|
8 ~A() noexcept(false);
|
|
9 };
|
|
10
|
|
11 struct B {
|
|
12 int x;
|
|
13 B(const B &);
|
|
14 B();
|
|
15 ~B();
|
|
16 };
|
|
17
|
|
18 int testA() {
|
|
19 __block A a0, a1;
|
|
20 ^{ a0.x = 1234; a1.x = 5678; };
|
|
21 return 0;
|
|
22 }
|
|
23
|
|
24 // CHECK-LABEL: define internal void @__Block_byref_object_copy_
|
|
25 // CHECK: call {{.*}} @_ZN1AC1ERKS_
|
|
26 // CHECK-LABEL: define internal void @__Block_byref_object_dispose_
|
|
27 // CHECK: call {{.*}} @_ZN1AD1Ev
|
|
28
|
|
29 // CHECK-LABEL: define linkonce_odr hidden void @__copy_helper_block_e{{4|8}}_{{20|32}}rc{{24|40}}rc(
|
|
30 // CHECK: call void @_Block_object_assign(
|
|
31 // CHECK: invoke void @_Block_object_assign(
|
|
32 // CHECK: call void @_Block_object_dispose({{.*}}) #[[NOUNWIND_ATTR:[0-9]+]]
|
|
33
|
|
34 // CHECK-LABEL: define linkonce_odr hidden void @__destroy_helper_block_e{{4|8}}_{{20|32}}rd{{24|40}}rd(
|
|
35 // CHECK: invoke void @_Block_object_dispose(
|
|
36 // CHECK: call void @_Block_object_dispose(
|
|
37 // CHECK: invoke void @_Block_object_dispose(
|
|
38
|
|
39 int testB() {
|
|
40 __block B b0, b1;
|
|
41 ^{ b0.x = 1234; b1.x = 5678; };
|
|
42 return 0;
|
|
43 }
|
|
44
|
|
45 // CHECK-LABEL: define internal void @__Block_byref_object_copy_
|
|
46 // CHECK: call {{.*}} @_ZN1BC1ERKS_
|
|
47 // CHECK-LABEL: define internal void @__Block_byref_object_dispose_
|
|
48 // CHECK: call {{.*}} @_ZN1BD1Ev
|
|
49
|
|
50 // CHECK-NOT: define{{.*}}@__copy_helper_block
|
|
51 // CHECK: define linkonce_odr hidden void @__destroy_helper_block_e{{4|8}}_{{20|32}}r{{24|40}}r(
|
|
52
|
|
53 // CHECK: attributes #[[NOUNWIND_ATTR]] = {{{.*}}nounwind{{.*}}}
|
|
54
|
|
55 // rdar://problem/11135650
|
|
56 namespace test1 {
|
|
57 struct A { int x; A(); ~A(); };
|
|
58
|
|
59 void test() {
|
|
60 return;
|
|
61 __block A a;
|
|
62 }
|
|
63 }
|