24 lines
832 B
C++
24 lines
832 B
C++
|
// Test -fsanitize-memory-use-after-dtor
|
||
|
// RUN: %clang_cc1 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-passes -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s
|
||
|
// RUN: %clang_cc1 -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -disable-llvm-passes -std=c++11 -triple=x86_64-pc-linux -emit-llvm -o - %s | FileCheck %s
|
||
|
|
||
|
struct Simple {
|
||
|
int x_;
|
||
|
Simple() {
|
||
|
x_ = 5;
|
||
|
}
|
||
|
~Simple() {
|
||
|
x_ += 1;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Simple s;
|
||
|
// Simple internal member is poisoned by compiler-generated dtor
|
||
|
// CHECK: define {{.*}}SimpleD2Ev{{.*}} [[ATTRIBUTE:#[0-9]+]]
|
||
|
// CHECK: {{^ *}}call void @__sanitizer_dtor_callback
|
||
|
// CHECK-NOT: call void @__sanitizer_dtor_callback
|
||
|
// CHECK: ret void
|
||
|
|
||
|
// Destructor does not emit any tail calls
|
||
|
// CHECK: attributes [[ATTRIBUTE]] = {{.*}}"disable-tail-calls"="true"
|