mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-11 06:56:12 +00:00
[msan] Fix handling of phi in blacklisted functions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212454 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8632e40c5d
commit
e3bf8ea879
@ -716,8 +716,6 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
|
||||
// Finalize PHI nodes.
|
||||
for (PHINode *PN : ShadowPHINodes) {
|
||||
Value *S = getShadow(PN);
|
||||
if (isa<Constant>(S)) continue;
|
||||
PHINode *PNS = cast<PHINode>(getShadow(PN));
|
||||
PHINode *PNO = MS.TrackOrigins ? cast<PHINode>(getOrigin(PN)) : nullptr;
|
||||
size_t NumValues = PN->getNumIncomingValues();
|
||||
@ -2396,6 +2394,11 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
|
||||
void visitPHINode(PHINode &I) {
|
||||
IRBuilder<> IRB(&I);
|
||||
if (!PropagateShadow) {
|
||||
setShadow(&I, getCleanShadow(&I));
|
||||
return;
|
||||
}
|
||||
|
||||
ShadowPHINodes.push_back(&I);
|
||||
setShadow(&I, IRB.CreatePHI(getShadowTy(&I), I.getNumIncomingValues(),
|
||||
"_msphi_s"));
|
||||
|
@ -743,6 +743,29 @@ declare i32 @NoSanitizeMemoryUndefHelper(i32 %x)
|
||||
; CHECK: ret i32
|
||||
|
||||
|
||||
; Test PHINode instrumentation in blacklisted functions
|
||||
|
||||
define i32 @NoSanitizeMemoryPHI(i32 %x) {
|
||||
entry:
|
||||
%tobool = icmp ne i32 %x, 0
|
||||
br i1 %tobool, label %cond.true, label %cond.false
|
||||
|
||||
cond.true: ; preds = %entry
|
||||
br label %cond.end
|
||||
|
||||
cond.false: ; preds = %entry
|
||||
br label %cond.end
|
||||
|
||||
cond.end: ; preds = %cond.false, %cond.true
|
||||
%cond = phi i32 [ undef, %cond.true ], [ undef, %cond.false ]
|
||||
ret i32 %cond
|
||||
}
|
||||
|
||||
; CHECK: [[A:%.*]] = phi i32 [ undef, %cond.true ], [ undef, %cond.false ]
|
||||
; CHECK: store i32 0, i32* bitcast {{.*}} @__msan_retval_tls
|
||||
; CHECK: ret i32 [[A]]
|
||||
|
||||
|
||||
; Test argument shadow alignment
|
||||
|
||||
define <2 x i64> @ArgumentShadowAlignment(i64 %a, <2 x i64> %b) sanitize_memory {
|
||||
|
Loading…
x
Reference in New Issue
Block a user