[llvm] 5739d29 - [MSAN] Correct shadow type for atomicrmw instrumentation
Keno Fischer via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 23 20:35:51 PDT 2022
Author: Keno Fischer
Date: 2022-08-24T03:24:19Z
New Revision: 5739d29cde07189b3209e0ff84473783f7b676bd
URL: https://github.com/llvm/llvm-project/commit/5739d29cde07189b3209e0ff84473783f7b676bd
DIFF: https://github.com/llvm/llvm-project/commit/5739d29cde07189b3209e0ff84473783f7b676bd.diff
LOG: [MSAN] Correct shadow type for atomicrmw instrumentation
We were passing the type of `Val` to `getShadowOriginPtr`, rather
than the type of `Val`'s shadow resulting in broken IR. The fix
is simple.
Reviewed By: eugenis
Differential Revision: https://reviews.llvm.org/D131845
Added:
Modified:
llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
llvm/test/Instrumentation/MemorySanitizer/atomics.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
index b1c3f54061884..6b155ec6d1ce9 100644
--- a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -1949,7 +1949,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
IRBuilder<> IRB(&I);
Value *Addr = I.getOperand(0);
Value *Val = I.getOperand(1);
- Value *ShadowPtr = getShadowOriginPtr(Addr, IRB, Val->getType(), Align(1),
+ Value *ShadowPtr = getShadowOriginPtr(Addr, IRB, getShadowTy(Val), Align(1),
/*isStore*/ true)
.first;
diff --git a/llvm/test/Instrumentation/MemorySanitizer/atomics.ll b/llvm/test/Instrumentation/MemorySanitizer/atomics.ll
index 4fff90ea788b9..196f67f03fad4 100644
--- a/llvm/test/Instrumentation/MemorySanitizer/atomics.ll
+++ b/llvm/test/Instrumentation/MemorySanitizer/atomics.ll
@@ -22,6 +22,20 @@ entry:
; CHECK: store i32 0, {{.*}} @__msan_retval_tls
; CHECK: ret i32
+; atomicrmw xchg ptr: exactly the same as above
+
+define i32* @AtomicRmwXchgPtr(i32** %p, i32* %x) sanitize_memory {
+entry:
+ %0 = atomicrmw xchg i32** %p, i32* %x seq_cst
+ ret i32* %0
+}
+
+; CHECK-LABEL: @AtomicRmwXchgPtr
+; CHECK: store i64 0,
+; CHECK: atomicrmw xchg {{.*}} seq_cst
+; CHECK: store i64 0, {{.*}} @__msan_retval_tls
+; CHECK: ret i32*
+
; atomicrmw max: exactly the same as above
More information about the llvm-commits
mailing list