Skip to content
Snippets Groups Projects
Commit 9e7eb7e6 authored by Reid Kleckner's avatar Reid Kleckner
Browse files

Don't emit lifetime markers when msan is enabled

In r235553, Clang started emitting lifetime markers more often. This
caused false negative in MSan, because MSan only poisons all allocas
once at function entry. Eventually, MSan should poison allocas at
lifetime start and probably also lifetime end, but until then, let's not
emit markers that aren't going to be useful.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235613 91177308-0d34-0410-b5e6-96231b3b80d8
parent 24aae829
No related branches found
No related tags found
No related merge requests found
......@@ -856,6 +856,11 @@ llvm::Value *CodeGenFunction::EmitLifetimeStart(uint64_t Size,
if (CGM.getCodeGenOpts().OptimizationLevel == 0)
return nullptr;
// Disable lifetime markers in msan builds.
// FIXME: Remove this when msan works with lifetime markers.
if (getLangOpts().Sanitize.has(SanitizerKind::Memory))
return nullptr;
llvm::Value *SizeV = llvm::ConstantInt::get(Int64Ty, Size);
llvm::Value *Args[] = {
SizeV,
......
// RUN: %clang_cc1 -O1 -triple x86_64-none-linux-gnu -emit-llvm -gline-tables-only %s -o - | FileCheck %s
// RUN: %clang_cc1 -O1 -triple x86_64-none-linux-gnu -emit-llvm -gline-tables-only %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=LIFETIME
// We shouldn't have markers at -O0 or with msan.
// RUN: %clang_cc1 -O0 -triple x86_64-none-linux-gnu -emit-llvm -gline-tables-only %s -o - | FileCheck %s --check-prefix=CHECK
// RUN: %clang_cc1 -O1 -triple x86_64-none-linux-gnu -emit-llvm -gline-tables-only %s -o - -fsanitize=memory | FileCheck %s --check-prefix=CHECK
// There is no exception to handle here, lifetime.end is not a destructor,
// so there is no need have cleanup dest slot related code
......@@ -9,7 +13,7 @@ int test() {
return *p;
// CHECK: [[X:%.*]] = alloca i32
// CHECK: [[P:%.*]] = alloca i32*
// CHECK: call void @llvm.lifetime.start(i64 4, i8* %{{.*}})
// CHECK: call void @llvm.lifetime.start(i64 8, i8* %{{.*}})
// LIFETIME: call void @llvm.lifetime.start(i64 4, i8* %{{.*}})
// LIFETIME: call void @llvm.lifetime.start(i64 8, i8* %{{.*}})
// CHECK-NOT: store i32 %{{.*}}, i32* %cleanup.dest.slot
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment