[msan] allow -fsanitize-coverage=N together with -fsanitize=memory, llvm part

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223312 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Kostya Serebryany 2014-12-03 23:28:26 +00:00
parent a78929d201
commit 0fd28b40a4
3 changed files with 6 additions and 3 deletions

View File

@ -1036,7 +1036,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
IRBuilder<> IRB(I.getNextNode());
Type *ShadowTy = getShadowTy(&I);
Value *Addr = I.getPointerOperand();
if (PropagateShadow) {
if (PropagateShadow && !I.getMetadata("nosanitize")) {
Value *ShadowPtr = getShadowPtr(Addr, ShadowTy, IRB);
setShadow(&I,
IRB.CreateAlignedLoad(ShadowPtr, I.getAlignment(), "_msld"));

View File

@ -166,7 +166,8 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
bool SanitizerCoverageModule::runOnFunction(Function &F) {
if (F.empty()) return false;
// For now instrument only functions that will also be asan-instrumented.
if (!F.hasFnAttribute(Attribute::SanitizeAddress))
if (!F.hasFnAttribute(Attribute::SanitizeAddress) &&
!F.hasFnAttribute(Attribute::SanitizeMemory))
return false;
if (CoverageLevel >= 3)
SplitAllCriticalEdges(F, this);
@ -273,6 +274,8 @@ void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F,
LoadInst *Load = IRB.CreateLoad(Guard);
Load->setAtomic(Monotonic);
Load->setAlignment(1);
Load->setMetadata(F.getParent()->getMDKindID("nosanitize"),
MDNode::get(*C, ArrayRef<llvm::Value *>()));
Value *Cmp = IRB.CreateICmpEQ(Constant::getNullValue(Int8Ty), Load);
Instruction *Ins = SplitBlockAndInsertIfThen(
Cmp, IP, false, MDBuilder(*C).createBranchWeights(1, 100000));

View File

@ -33,7 +33,7 @@ entry:
; CHECK0-NOT: call void @__sanitizer_cov_module_init(
; CHECK1-LABEL: define void @foo
; CHECK1: %0 = load atomic i8* @__sancov_gen_cov_foo monotonic, align 1
; CHECK1: %0 = load atomic i8* @__sancov_gen_cov_foo monotonic, align 1, !nosanitize
; CHECK1: %1 = icmp eq i8 0, %0
; CHECK1: br i1 %1, label %2, label %3
; CHECK1: call void @__sanitizer_cov(i8*{{.*}})