mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 19:35:54 +00:00
[msan] Fix origin propagation for select of floats.
MSan does not assign origin for instrumentation temps (i.e. the ones that do not come from the application code), but "select" instrumentation erroneously tried to use one of those. https://code.google.com/p/memory-sanitizer/issues/detail?id=78 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222918 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
56101e1cc5
commit
434d82ef66
@ -2452,9 +2452,10 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
}
|
||||
// a = select b, c, d
|
||||
// Oa = Sb ? Ob : (b ? Oc : Od)
|
||||
setOrigin(&I, IRB.CreateSelect(
|
||||
Sb, getOrigin(I.getCondition()),
|
||||
IRB.CreateSelect(B, getOrigin(C), getOrigin(D))));
|
||||
setOrigin(
|
||||
&I, IRB.CreateSelect(Sb, getOrigin(I.getCondition()),
|
||||
IRB.CreateSelect(B, getOrigin(I.getTrueValue()),
|
||||
getOrigin(I.getFalseValue()))));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,3 +17,17 @@ entry:
|
||||
; CHECK: [[A:%.*]] = load i32* {{.*}}@__msan_param_origin_tls,
|
||||
; CHECK: store i32 [[A]], i32* @__msan_retval_origin_tls
|
||||
; CHECK: ret <4 x i32>
|
||||
|
||||
|
||||
; Regression test for origin propagation in "select i1, float, float".
|
||||
; https://code.google.com/p/memory-sanitizer/issues/detail?id=78
|
||||
|
||||
define float @SelectFloat(i1 %b, float %x, float %y) nounwind uwtable sanitize_memory {
|
||||
entry:
|
||||
%z = select i1 %b, float %x, float %y
|
||||
ret float %z
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @SelectFloat(
|
||||
; CHECK-NOT: select {{.*}} i32 0, i32 0
|
||||
; CHECK: ret float
|
||||
|
Loading…
x
Reference in New Issue
Block a user