[llvm] r230316 - Fix alloca_instruments_all_paddings.cc test to work under higher -O levels (llvm part)

Kuba Brecka kuba.brecka at gmail.com
Tue Feb 24 01:47:05 PST 2015


Author: kuba.brecka
Date: Tue Feb 24 03:47:05 2015
New Revision: 230316

URL: http://llvm.org/viewvc/llvm-project?rev=230316&view=rev
Log:
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


Modified:
    llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp

Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=230316&r1=230315&r2=230316&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Tue Feb 24 03:47:05 2015
@@ -1644,10 +1644,13 @@ Value *FunctionStackPoisoner::createAllo
 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();





More information about the llvm-commits mailing list