mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 04:35:00 +00:00
[asan] workaround for PR16277: don't instrument AllocaInstr with alignment more than the redzone size
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184928 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
20985711c7
commit
d4429214a2
@ -451,7 +451,7 @@ struct FunctionStackPoisoner : public InstVisitor<FunctionStackPoisoner> {
|
||||
|
||||
StackAlignment = std::max(StackAlignment, AI.getAlignment());
|
||||
AllocaVec.push_back(&AI);
|
||||
uint64_t AlignedSize = getAlignedAllocaSize(&AI);
|
||||
uint64_t AlignedSize = getAlignedAllocaSize(&AI);
|
||||
TotalStackSize += AlignedSize;
|
||||
}
|
||||
|
||||
@ -488,6 +488,7 @@ struct FunctionStackPoisoner : public InstVisitor<FunctionStackPoisoner> {
|
||||
bool isInterestingAlloca(AllocaInst &AI) {
|
||||
return (!AI.isArrayAllocation() &&
|
||||
AI.isStaticAlloca() &&
|
||||
AI.getAlignment() <= RedzoneSize() &&
|
||||
AI.getAllocatedType()->isSized());
|
||||
}
|
||||
|
||||
|
@ -89,6 +89,25 @@ entry:
|
||||
; CHECK-NOT: = alloca
|
||||
; CHECK: ret void
|
||||
|
||||
; Check that asan does not touch allocas with alignment > 32.
|
||||
define void @alloca_alignment_test() sanitize_address {
|
||||
entry:
|
||||
%x = alloca [10 x i8], align 64
|
||||
%y = alloca [10 x i8], align 128
|
||||
%z = alloca [10 x i8], align 256
|
||||
call void @alloca_test_use([10 x i8]* %x)
|
||||
call void @alloca_test_use([10 x i8]* %y)
|
||||
call void @alloca_test_use([10 x i8]* %z)
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: define void @alloca_alignment_test()
|
||||
; CHECK: = alloca{{.*}} align 64
|
||||
; CHECK: = alloca{{.*}} align 128
|
||||
; CHECK: = alloca{{.*}} align 256
|
||||
; CHECK: ret void
|
||||
|
||||
|
||||
define void @LongDoubleTest(x86_fp80* nocapture %a) nounwind uwtable sanitize_address {
|
||||
entry:
|
||||
store x86_fp80 0xK3FFF8000000000000000, x86_fp80* %a, align 16
|
||||
|
Loading…
x
Reference in New Issue
Block a user