comparison clang/test/CodeGenCXX/sanitize-dtor-nontrivial-virtual-base.cpp @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children c4bab56944e8
comparison
equal deleted inserted replaced
147:c2174574ed3a 150:1d019706d866
1 // RUN: %clang_cc1 -fsanitize=memory -O0 -fsanitize-memory-use-after-dtor -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s
2 // RUN: %clang_cc1 -fsanitize=memory -O1 -fno-experimental-new-pass-manager -fsanitize-memory-use-after-dtor -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s
3
4 template <class T>
5 class Vector {
6 public:
7 int size;
8 ~Vector() {
9 size += 1;
10 }
11 };
12
13 struct Base {
14 int b1;
15 double b2;
16 Base() {
17 b1 = 5;
18 b2 = 10.989;
19 }
20 virtual ~Base() {}
21 };
22
23 struct VirtualBase {
24 int vb1;
25 int vb2;
26 VirtualBase() {
27 vb1 = 10;
28 vb2 = 11;
29 }
30 virtual ~VirtualBase() {}
31 };
32
33 struct Derived : public Base, public virtual VirtualBase {
34 int d1;
35 Vector<int> v;
36 int d2;
37 Derived() {
38 d1 = 10;
39 }
40 ~Derived() {}
41 };
42
43 Derived d;
44
45 // Destruction order:
46 // Derived: int, Vector, Base, VirtualBase
47
48 // CHECK-LABEL: define {{.*}}ZN7DerivedD1Ev
49 // CHECK: call void {{.*}}ZN11VirtualBaseD2Ev
50 // CHECK: ret void
51
52 // CHECK-LABEL: define {{.*}}ZN7DerivedD0Ev
53 // CHECK: ret void
54
55 // CHECK-LABEL: define {{.*}}ZN11VirtualBaseD1Ev
56 // CHECK: ret void
57
58 // CHECK-LABEL: define {{.*}}ZN11VirtualBaseD0Ev
59 // CHECK: ret void
60
61 // poison 2 ints
62 // CHECK-LABEL: define {{.*}}ZN11VirtualBaseD2Ev
63 // CHECK: call void {{.*}}sanitizer_dtor_callback({{.*}}, i64 8)
64 // CHECK: ret void
65
66 // poison int and double
67 // CHECK-LABEL: define {{.*}}ZN4BaseD2Ev
68 // CHECK: call void {{.*}}sanitizer_dtor_callback({{.*}}, i64 16)
69 // CHECK: ret void
70
71 // poison int, ignore vector, poison int
72 // CHECK-LABEL: define {{.*}}ZN7DerivedD2Ev
73 // CHECK: call void {{.*}}ZN6VectorIiED1Ev
74 // CHECK: call void {{.*}}sanitizer_dtor_callback({{.*}}, i64 4)
75 // CHECK: call void {{.*}}sanitizer_dtor_callback({{.*}}, i64 4)
76 // CHECK: call void {{.*}}ZN4BaseD2Ev
77 // CHECK: ret void
78
79 // poison int
80 // CHECK-LABEL: define {{.*}}ZN6VectorIiED2Ev
81 // CHECK: call void {{.*}}sanitizer_dtor_callback({{.*}}, i64 4)
82 // CHECK: ret void