annotate clang/test/CodeGenObjCXX/literals.mm @ 222:81f6424ef0e3 llvm-original

LLVM original branch
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 18 Jul 2021 22:10:01 +0900
parents 79ff65ed7e25
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -std=gnu++98 -I %S/Inputs -triple x86_64-apple-darwin10 -emit-llvm -fblocks -fobjc-arc -fobjc-runtime-has-weak -fexceptions -fobjc-exceptions -fcxx-exceptions -fobjc-arc-exceptions -O2 -disable-llvm-passes -o - %s | FileCheck %s
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 #include "literal-support.h"
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 struct X {
anatofuz
parents:
diff changeset
6 X();
anatofuz
parents:
diff changeset
7 ~X();
anatofuz
parents:
diff changeset
8 operator id() const;
anatofuz
parents:
diff changeset
9 };
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 struct Y {
anatofuz
parents:
diff changeset
12 Y();
anatofuz
parents:
diff changeset
13 ~Y();
anatofuz
parents:
diff changeset
14 operator id() const;
anatofuz
parents:
diff changeset
15 };
anatofuz
parents:
diff changeset
16
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
17 // CHECK-LABEL: define{{.*}} void @_Z10test_arrayv
150
anatofuz
parents:
diff changeset
18 void test_array() {
anatofuz
parents:
diff changeset
19 // CHECK: [[ARR:%[a-zA-Z0-9.]+]] = alloca i8*
anatofuz
parents:
diff changeset
20 // CHECK: [[OBJECTS:%[a-zA-Z0-9.]+]] = alloca [2 x i8*]
anatofuz
parents:
diff changeset
21 // CHECK: [[TMPX:%[a-zA-Z0-9.]+]] = alloca %
anatofuz
parents:
diff changeset
22 // CHECK: [[TMPY:%[a-zA-Z0-9.]+]] = alloca %
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 // Initializing first element
anatofuz
parents:
diff changeset
25 // CHECK: [[PTR1:%.*]] = bitcast i8** [[ARR]] to i8*
anatofuz
parents:
diff changeset
26 // CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 8, i8* [[PTR1]])
anatofuz
parents:
diff changeset
27 // CHECK: [[ELEMENT0:%[a-zA-Z0-9.]+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[OBJECTS]], i64 0, i64 0
anatofuz
parents:
diff changeset
28 // CHECK-NEXT: [[TMP_CAST:%.*]] = bitcast {{.*}} [[TMPX]] to i8*
anatofuz
parents:
diff changeset
29 // CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* [[TMP_CAST]])
anatofuz
parents:
diff changeset
30 // CHECK-NEXT: call void @_ZN1XC1Ev({{.*}} [[TMPX]])
anatofuz
parents:
diff changeset
31 // CHECK-NEXT: [[OBJECT0:%[a-zA-Z0-9.]+]] = invoke i8* @_ZNK1XcvP11objc_objectEv
anatofuz
parents:
diff changeset
32 // CHECK: [[RET0:%[a-zA-Z0-9.]+]] = notail call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[OBJECT0]])
anatofuz
parents:
diff changeset
33 // CHECK: store i8* [[RET0]], i8** [[ELEMENT0]]
anatofuz
parents:
diff changeset
34
anatofuz
parents:
diff changeset
35 // Initializing the second element
anatofuz
parents:
diff changeset
36 // CHECK: [[ELEMENT1:%[a-zA-Z0-9.]+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[OBJECTS]], i64 0, i64 1
anatofuz
parents:
diff changeset
37 // CHECK-NEXT: [[TMP_CAST:%.*]] = bitcast {{.*}} [[TMPY]] to i8*
anatofuz
parents:
diff changeset
38 // CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 1, i8* [[TMP_CAST]])
anatofuz
parents:
diff changeset
39 // CHECK-NEXT: invoke void @_ZN1YC1Ev({{.*}} [[TMPY]])
anatofuz
parents:
diff changeset
40 // CHECK: [[OBJECT1:%[a-zA-Z0-9.]+]] = invoke i8* @_ZNK1YcvP11objc_objectEv
anatofuz
parents:
diff changeset
41 // CHECK: [[RET1:%[a-zA-Z0-9.]+]] = notail call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[OBJECT1]])
anatofuz
parents:
diff changeset
42 // CHECK: store i8* [[RET1]], i8** [[ELEMENT1]]
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 // Build the array
anatofuz
parents:
diff changeset
45 // CHECK: {{invoke.*@objc_msgSend}}
anatofuz
parents:
diff changeset
46 // CHECK: call i8* @llvm.objc.retainAutoreleasedReturnValue
anatofuz
parents:
diff changeset
47 id arr = @[ X(), Y() ];
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 // Destroy temporaries
anatofuz
parents:
diff changeset
50 // CHECK-NOT: ret void
anatofuz
parents:
diff changeset
51 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
52 // CHECK-NOT: ret void
anatofuz
parents:
diff changeset
53 // CHECK: invoke void @_ZN1YD1Ev
anatofuz
parents:
diff changeset
54 // CHECK-NOT: ret void
anatofuz
parents:
diff changeset
55 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
56 // CHECK-NEXT: call void @_ZN1XD1Ev
anatofuz
parents:
diff changeset
57 // CHECK-NOT: ret void
anatofuz
parents:
diff changeset
58 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
59 // CHECK-NEXT: [[PTR2:%.*]] = bitcast i8** [[ARR]] to i8*
anatofuz
parents:
diff changeset
60 // CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 8, i8* [[PTR2]])
anatofuz
parents:
diff changeset
61 // CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 // Check cleanups
anatofuz
parents:
diff changeset
64 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
65 // CHECK-NOT: call void @llvm.objc.release
anatofuz
parents:
diff changeset
66 // CHECK: invoke void @_ZN1YD1Ev
anatofuz
parents:
diff changeset
67 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
68 // CHECK-NOT: call void @llvm.objc.release
anatofuz
parents:
diff changeset
69 // CHECK: invoke void @_ZN1XD1Ev
anatofuz
parents:
diff changeset
70 // CHECK-NOT: call void @llvm.objc.release
anatofuz
parents:
diff changeset
71 // CHECK: unreachable
anatofuz
parents:
diff changeset
72 }
anatofuz
parents:
diff changeset
73
anatofuz
parents:
diff changeset
74 // CHECK-LABEL: define weak_odr void @_Z24test_array_instantiationIiEvv
anatofuz
parents:
diff changeset
75 template<typename T>
anatofuz
parents:
diff changeset
76 void test_array_instantiation() {
anatofuz
parents:
diff changeset
77 // CHECK: [[ARR:%[a-zA-Z0-9.]+]] = alloca i8*
anatofuz
parents:
diff changeset
78 // CHECK: [[OBJECTS:%[a-zA-Z0-9.]+]] = alloca [2 x i8*]
anatofuz
parents:
diff changeset
79
anatofuz
parents:
diff changeset
80 // Initializing first element
anatofuz
parents:
diff changeset
81 // CHECK: [[PTR1:%.*]] = bitcast i8** [[ARR]] to i8*
anatofuz
parents:
diff changeset
82 // CHECK-NEXT: call void @llvm.lifetime.start.p0i8(i64 8, i8* [[PTR1]])
anatofuz
parents:
diff changeset
83 // CHECK: [[ELEMENT0:%[a-zA-Z0-9.]+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[OBJECTS]], i64 0, i64 0
anatofuz
parents:
diff changeset
84 // CHECK: call void @_ZN1XC1Ev
anatofuz
parents:
diff changeset
85 // CHECK-NEXT: [[OBJECT0:%[a-zA-Z0-9.]+]] = invoke i8* @_ZNK1XcvP11objc_objectEv
anatofuz
parents:
diff changeset
86 // CHECK: [[RET0:%[a-zA-Z0-9.]+]] = notail call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[OBJECT0]])
anatofuz
parents:
diff changeset
87 // CHECK: store i8* [[RET0]], i8** [[ELEMENT0]]
anatofuz
parents:
diff changeset
88
anatofuz
parents:
diff changeset
89 // Initializing the second element
anatofuz
parents:
diff changeset
90 // CHECK: [[ELEMENT1:%[a-zA-Z0-9.]+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[OBJECTS]], i64 0, i64 1
anatofuz
parents:
diff changeset
91 // CHECK: invoke void @_ZN1YC1Ev
anatofuz
parents:
diff changeset
92 // CHECK: [[OBJECT1:%[a-zA-Z0-9.]+]] = invoke i8* @_ZNK1YcvP11objc_objectEv
anatofuz
parents:
diff changeset
93 // CHECK: [[RET1:%[a-zA-Z0-9.]+]] = notail call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* [[OBJECT1]])
anatofuz
parents:
diff changeset
94 // CHECK: store i8* [[RET1]], i8** [[ELEMENT1]]
anatofuz
parents:
diff changeset
95
anatofuz
parents:
diff changeset
96 // Build the array
anatofuz
parents:
diff changeset
97 // CHECK: {{invoke.*@objc_msgSend}}
anatofuz
parents:
diff changeset
98 // CHECK: call i8* @llvm.objc.retainAutoreleasedReturnValue
anatofuz
parents:
diff changeset
99 id arr = @[ X(), Y() ];
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 // Destroy temporaries
anatofuz
parents:
diff changeset
102 // CHECK-NOT: ret void
anatofuz
parents:
diff changeset
103 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
104 // CHECK-NOT: ret void
anatofuz
parents:
diff changeset
105 // CHECK: invoke void @_ZN1YD1Ev
anatofuz
parents:
diff changeset
106 // CHECK-NOT: ret void
anatofuz
parents:
diff changeset
107 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
108 // CHECK-NEXT: call void @_ZN1XD1Ev
anatofuz
parents:
diff changeset
109 // CHECK-NOT: ret void
anatofuz
parents:
diff changeset
110 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
111 // CHECK-NEXT: [[PTR2]] = bitcast i8** [[ARR]] to i8*
anatofuz
parents:
diff changeset
112 // CHECK-NEXT: call void @llvm.lifetime.end.p0i8(i64 8, i8* [[PTR2]])
anatofuz
parents:
diff changeset
113 // CHECK-NEXT: ret void
anatofuz
parents:
diff changeset
114
anatofuz
parents:
diff changeset
115 // Check cleanups
anatofuz
parents:
diff changeset
116 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
117 // CHECK-NOT: call void @llvm.objc.release
anatofuz
parents:
diff changeset
118 // CHECK: invoke void @_ZN1YD1Ev
anatofuz
parents:
diff changeset
119 // CHECK: call void @llvm.objc.release
anatofuz
parents:
diff changeset
120 // CHECK-NOT: call void @llvm.objc.release
anatofuz
parents:
diff changeset
121 // CHECK: invoke void @_ZN1XD1Ev
anatofuz
parents:
diff changeset
122 // CHECK-NOT: call void @llvm.objc.release
anatofuz
parents:
diff changeset
123 // CHECK: unreachable
anatofuz
parents:
diff changeset
124 }
anatofuz
parents:
diff changeset
125
anatofuz
parents:
diff changeset
126 template void test_array_instantiation<int>();
anatofuz
parents:
diff changeset
127