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