[msan] Make -msan-check-constant-shadow a bit stronger.
Allow (under the experimental flag) non-Instructions to participate in MSan checks. llvm-svn: 220601
This commit is contained in:
parent
5a52e6dc9e
commit
d337a59db5
|
@ -1062,9 +1062,16 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
|||
/// UMR warning in runtime if the value is not fully defined.
|
||||
void insertShadowCheck(Value *Val, Instruction *OrigIns) {
|
||||
assert(Val);
|
||||
Instruction *Shadow = dyn_cast_or_null<Instruction>(getShadow(Val));
|
||||
if (!Shadow) return;
|
||||
Instruction *Origin = dyn_cast_or_null<Instruction>(getOrigin(Val));
|
||||
Value *Shadow, *Origin;
|
||||
if (ClCheckConstantShadow) {
|
||||
Shadow = getShadow(Val);
|
||||
if (!Shadow) return;
|
||||
Origin = getOrigin(Val);
|
||||
} else {
|
||||
Shadow = dyn_cast_or_null<Instruction>(getShadow(Val));
|
||||
if (!Shadow) return;
|
||||
Origin = dyn_cast_or_null<Instruction>(getOrigin(Val));
|
||||
}
|
||||
insertShadowCheck(Shadow, Origin, OrigIns);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
; RUN: opt < %s -msan -msan-check-constant-shadow=1 -S | FileCheck %s
|
||||
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
; Test that returning a literal undef from main() triggers an MSan warning.
|
||||
|
||||
define i32 @main() nounwind uwtable sanitize_memory {
|
||||
entry:
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @main
|
||||
; CHECK: call void @__msan_warning_noreturn
|
||||
; CHECK: ret i32 undef
|
Loading…
Reference in New Issue