[PATCH] D49473: [MSan] run materializeChecks() before materializeStores()
Alexander Potapenko via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 20 02:03:41 PDT 2018
glider updated this revision to Diff 156446.
glider added a comment.
Fixed check_access_address.ll
https://reviews.llvm.org/D49473
Files:
lib/Transforms/Instrumentation/MemorySanitizer.cpp
test/Instrumentation/MemorySanitizer/check_access_address.ll
Index: test/Instrumentation/MemorySanitizer/check_access_address.ll
===================================================================
--- test/Instrumentation/MemorySanitizer/check_access_address.ll
+++ test/Instrumentation/MemorySanitizer/check_access_address.ll
@@ -38,11 +38,14 @@
; CHECK-LABEL: @Store
; CHECK: load {{.*}} @__msan_param_tls
+; Shadow calculations must happen after the check.
+; CHECK-NOT: xor
; CHECK: icmp
; CHECK: br i1
; CHECK: <label>
; CHECK: call void @__msan_warning_noreturn
; CHECK: <label>
+; CHECK: xor
; CHECK: store
; CHECK: store i32 %x
; CHECK: ret void
Index: lib/Transforms/Instrumentation/MemorySanitizer.cpp
===================================================================
--- lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -918,9 +918,6 @@
StoreInst *NewSI = IRB.CreateAlignedStore(Shadow, ShadowPtr, Alignment);
LLVM_DEBUG(dbgs() << " STORE: " << *NewSI << "\n");
- if (ClCheckAccessAddress)
- insertShadowCheck(Addr, NewSI);
-
if (SI->isAtomic())
SI->setOrdering(addReleaseOrdering(SI->getOrdering()));
@@ -1024,13 +1021,13 @@
InstrumentationList.size() + StoreList.size() >
(unsigned)ClInstrumentationWithCallThreshold;
- // Delayed instrumentation of StoreInst.
- // This may add new checks to be inserted later.
- materializeStores(InstrumentWithCalls);
-
// Insert shadow value checks.
materializeChecks(InstrumentWithCalls);
+ // Delayed instrumentation of StoreInst.
+ // This may not add new address checks.
+ materializeStores(InstrumentWithCalls);
+
return true;
}
@@ -1490,6 +1487,8 @@
/// Optionally, checks that the store address is fully defined.
void visitStoreInst(StoreInst &I) {
StoreList.push_back(&I);
+ if (ClCheckAccessAddress)
+ insertShadowCheck(I.getPointerOperand(), &I);
}
void handleCASOrRMW(Instruction &I) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49473.156446.patch
Type: text/x-patch
Size: 2044 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180720/b72b696e/attachment.bin>
More information about the llvm-commits
mailing list