23 lines · cpp
1// Test -fsanitize-memory-use-after-dtor2// 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 --implicit-check-not="call void @__sanitizer_"3// 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 --implicit-check-not="call void @__sanitizer_"4 5struct Simple {6 int x_;7 Simple() {8 x_ = 5;9 }10 ~Simple() {11 x_ += 1;12 }13};14 15Simple s;16// Simple internal member is poisoned by compiler-generated dtor17// CHECK: define {{.*}}SimpleD2Ev{{.*}} [[ATTRIBUTE:#[0-9]+]]18// CHECK: call void @__sanitizer_dtor_callback_fields(19// CHECK: ret void20 21// Destructor does not emit any tail calls22// CHECK: attributes [[ATTRIBUTE]] = {{.*}}"disable-tail-calls"="true"23