mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-20 19:20:23 +00:00
[msan] Do not insert check on volatile store.
Volatile bitfields can cause valid stores of uninitialized bits. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173153 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
318b2cc86f
commit
4247b13252
@ -451,9 +451,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
IRB.CreateAlignedStore(Shadow, ShadowPtr, I.getAlignment());
|
||||
DEBUG(dbgs() << " STORE: " << *NewSI << "\n");
|
||||
(void)NewSI;
|
||||
// If the store is volatile, add a check.
|
||||
if (I.isVolatile())
|
||||
insertCheck(Val, &I);
|
||||
|
||||
if (ClCheckAccessAddress)
|
||||
insertCheck(Addr, &I);
|
||||
|
||||
@ -847,7 +845,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
///
|
||||
/// Stores the corresponding shadow and (optionally) origin.
|
||||
/// Optionally, checks that the store address is fully defined.
|
||||
/// Volatile stores check that the value being stored is fully defined.
|
||||
void visitStoreInst(StoreInst &I) {
|
||||
StoreList.push_back(&I);
|
||||
}
|
||||
|
@ -563,3 +563,17 @@ define void @VACopy(i8* %p1, i8* %p2) nounwind uwtable {
|
||||
; CHECK: @VACopy
|
||||
; CHECK: call void @llvm.memset.p0i8.i64({{.*}}, i8 0, i64 24, i32 8, i1 false)
|
||||
; CHECK: ret void
|
||||
|
||||
|
||||
; Test handling of volatile stores.
|
||||
; Check that MemorySanitizer does not add a check of the value being stored.
|
||||
|
||||
define void @VolatileStore(i32* nocapture %p, i32 %x) nounwind uwtable {
|
||||
entry:
|
||||
store volatile i32 %x, i32* %p, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: @VolatileStore
|
||||
; CHECK-NOT: @__msan_warning
|
||||
; CHECK: ret void
|
||||
|
Loading…
Reference in New Issue
Block a user