[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGenObjCXX / destroy.mm
bloba534828c3a89332b642c31bef625640328b02cf6
1 // RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -disable-llvm-passes -o - %s | FileCheck %s
3 @class MyObject;
4 struct base {
5   ~base() = default;
6 };
7 struct derived : public base {
8   MyObject *myobject;
9 };
11 void test1() {
12   derived d1;
14 // CHECK-LABEL: define{{.*}} void @_Z5test1v()
15 // CHECK: call void @_ZN7derivedC1Ev
16 // CHECK: call void @_ZN7derivedD1Ev
18 void test2() {
19   derived *d2 = new derived;
20   delete d2;
22 // CHECK-LABEL: define{{.*}} void @_Z5test2v()
23 // CHECK:   call void @_ZN7derivedC1Ev
24 // CHECK:   call void @_ZN7derivedD1Ev
26 template <typename T>
27 struct tderived : public base {
28   MyObject *myobject;
30 void test3() {
31   tderived<int> d1;
33 // CHECK-LABEL: define{{.*}} void @_Z5test3v()
34 // CHECK: call void @_ZN8tderivedIiEC1Ev
35 // CHECK: call void @_ZN8tderivedIiED1Ev
37 void test4() {
38   tderived<int> *d2 = new tderived<int>;
39   delete d2;
41 // CHECK-LABEL: define{{.*}} void @_Z5test4v()
42 // CHECK: call void @_ZN8tderivedIiEC1Ev
43 // CHECK: call void @_ZN8tderivedIiED1Ev
45 // CHECK-LABEL: define linkonce_odr void @_ZN7derivedD2Ev
46 // CHECK: call void @llvm.objc.storeStrong(ptr {{.*}}, ptr null)
48 // CHECK-LABEL: define linkonce_odr void @_ZN8tderivedIiED2Ev
49 // CHECK: call void @llvm.objc.storeStrong(ptr {{.*}}, ptr null)