Fix detection of stack-use-after scope for char arrays.
Summary: Clang inserts GetElementPtrInst so findAllocaForValue was not able to find allocas. PR27453 Reviewers: kcc, eugenis Differential Revision: https://reviews.llvm.org/D22657 llvm-svn: 276374
This commit is contained in:
parent
aae623f4c2
commit
53054a7024
|
@ -2286,6 +2286,10 @@ AllocaInst *FunctionStackPoisoner::findAllocaForValue(Value *V) {
|
|||
return nullptr;
|
||||
Res = IncValueAI;
|
||||
}
|
||||
} else if (GetElementPtrInst *EP = dyn_cast<GetElementPtrInst>(V)) {
|
||||
Res = findAllocaForValue(EP->getPointerOperand());
|
||||
} else {
|
||||
DEBUG(dbgs() << "Alloca search canceled on unknown instruction: " << *V << "\n");
|
||||
}
|
||||
if (Res) AllocaForValue[V] = Res;
|
||||
return Res;
|
||||
|
|
|
@ -91,6 +91,26 @@ bb1:
|
|||
ret void
|
||||
}
|
||||
|
||||
; Check that arguments of lifetime may come from getelementptr nodes.
|
||||
define void @getelementptr_args() sanitize_address{
|
||||
; CHECK-LABEL: define void @getelementptr_args
|
||||
entry:
|
||||
%x = alloca [1024 x i8], align 16
|
||||
%d = alloca i8*, align 8
|
||||
|
||||
%0 = getelementptr inbounds [1024 x i8], [1024 x i8]* %x, i64 0, i64 0
|
||||
call void @llvm.lifetime.start(i64 1024, i8* %0)
|
||||
; CHECK: __asan_unpoison_stack_memory
|
||||
|
||||
store i8* %0, i8** %d, align 8
|
||||
|
||||
call void @llvm.lifetime.end(i64 1024, i8* %0)
|
||||
; CHECK: __asan_poison_stack_memory
|
||||
|
||||
ret void
|
||||
; CHECK: __asan_unpoison_stack_memory
|
||||
}
|
||||
|
||||
define void @zero_sized(i64 %a) #0 {
|
||||
; CHECK-LABEL: define void @zero_sized(i64 %a)
|
||||
|
||||
|
|
Loading…
Reference in New Issue