From 81dce4c02c3c0a9a8a8cdb9c244245a1562ebe0e Mon Sep 17 00:00:00 2001 From: Kuba Brecka Date: Tue, 24 Feb 2015 09:47:05 +0000 Subject: [PATCH] Fix alloca_instruments_all_paddings.cc test to work under higher -O levels (llvm part) When AddressSanitizer only a single dynamic alloca and no static allocas, due to an early exit from FunctionStackPoisoner::poisonStack we forget to unpoison the dynamic alloca. This patch fixes that. Reviewed at http://reviews.llvm.org/D7810 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230316 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Instrumentation/AddressSanitizer.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/lib/Transforms/Instrumentation/AddressSanitizer.cpp index 3d14d8f0cfa..882aab0a70d 100644 --- a/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ b/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -1644,10 +1644,13 @@ Value *FunctionStackPoisoner::createAllocaForLayout( void FunctionStackPoisoner::poisonStack() { assert(AllocaVec.size() > 0 || DynamicAllocaVec.size() > 0); - if (ClInstrumentAllocas) + if (ClInstrumentAllocas) { // Handle dynamic allocas. - for (auto &AllocaCall : DynamicAllocaVec) + for (auto &AllocaCall : DynamicAllocaVec) { handleDynamicAllocaCall(AllocaCall); + unpoisonDynamicAlloca(AllocaCall); + } + } if (AllocaVec.size() == 0) return; @@ -1826,11 +1829,6 @@ void FunctionStackPoisoner::poisonStack() { } } - if (ClInstrumentAllocas) - // Unpoison dynamic allocas. - for (auto &AllocaCall : DynamicAllocaVec) - unpoisonDynamicAlloca(AllocaCall); - // We are done. Remove the old unused alloca instructions. for (auto AI : AllocaVec) AI->eraseFromParent();