1
1
// RUN: %clang_cc1 -O0 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-passes -std=c++20 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s --implicit-check-not "call void @__sanitizer_dtor_callback"
2
2
// RUN: %clang_cc1 -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-passes -std=c++20 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s --implicit-check-not "call void @__sanitizer_dtor_callback"
3
3
4
- // This test convers invalid behaviour which will be fixed in followup patches.
5
-
6
4
struct Empty {};
7
5
8
6
struct EmptyNonTrivial {
@@ -115,7 +113,7 @@ struct Struct {
115
113
static_assert (sizeof (Struct) == 24 );
116
114
} // namespace T6
117
115
// CHECK-LABEL: define {{.*}} @_ZN5empty2T66StructD2Ev(
118
- // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 21 )
116
+ // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 13 )
119
117
// CHECK-NEXT: ret void
120
118
121
119
namespace T7 {
@@ -130,7 +128,7 @@ static_assert(sizeof(Struct) == 24);
130
128
} // namespace T7
131
129
// CHECK-LABEL: define {{.*}} @_ZN5empty2T76StructD2Ev(
132
130
// CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 8)
133
- // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 21 )
131
+ // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 5 )
134
132
// CHECK-NEXT: ret void
135
133
136
134
namespace T8 {
@@ -160,7 +158,7 @@ static_assert(sizeof(Struct) == 24);
160
158
} // namespace T9
161
159
// CHECK-LABEL: define {{.*}} @_ZN5empty2T96StructD2Ev(
162
160
// CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 12)
163
- // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 21 )
161
+ // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 1 )
164
162
// CHECK-NEXT: ret void
165
163
166
164
namespace T10 {
@@ -190,7 +188,6 @@ static_assert(sizeof(Struct) == 24);
190
188
} // namespace T11
191
189
// CHECK-LABEL: define {{.*}} @_ZN5empty3T116StructD2Ev(
192
190
// CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 16)
193
- // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 24)
194
191
// CHECK-NEXT: ret void
195
192
196
193
namespace T12 {
@@ -317,6 +314,7 @@ struct Struct {
317
314
static_assert (sizeof (Struct) == 24 );
318
315
} // namespace T8
319
316
// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial2T86StructD2Ev(
317
+ // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 8)
320
318
// CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 5)
321
319
// CHECK-NEXT: ret void
322
320
@@ -346,6 +344,7 @@ struct Struct {
346
344
static_assert (sizeof (Struct) == 24 );
347
345
} // namespace T10
348
346
// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial3T106StructD2Ev(
347
+ // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 12)
349
348
// CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 1)
350
349
// CHECK-NEXT: ret void
351
350
@@ -375,4 +374,5 @@ static_assert(sizeof(Struct) == 24);
375
374
} // namespace T12
376
375
} // namespace empty_non_trivial
377
376
// CHECK-LABEL: define {{.*}} @_ZN17empty_non_trivial3T126StructD2Ev(
377
+ // CHECK: call void @__sanitizer_dtor_callback(i8* {{.*}}, i64 16)
378
378
// CHECK: ret void
0 commit comments