summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp')
-rw-r--r--llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
index 0e5e871df9a..1850b0c56ec 100644
--- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -183,6 +183,10 @@ static cl::opt<bool> ClExperimentalPoisoning(
"asan-experimental-poisoning",
cl::desc("Enable experimental red zones and scope poisoning"), cl::Hidden,
cl::init(true));
+static cl::opt<bool> ClSkipAmbiguousLifetimeAllocas(
+ "asan-skip-ambiguous-lifetime-allocas",
+ cl::desc("Disabled lifetime check for allocas with ambiguous lifetime"),
+ cl::Hidden, cl::init(true));
// This flag may need to be replaced with -f[no]asan-globals.
static cl::opt<bool> ClGlobals("asan-globals",
cl::desc("Handle global objects"), cl::Hidden,
@@ -890,6 +894,8 @@ public:
// This is workaround for PR28267.
void removeAllocasWithAmbiguousLifetime(
SmallVectorImpl<FunctionStackPoisoner::AllocaPoisonCall> &PoisonCallVec) {
+ if (!ClSkipAmbiguousLifetimeAllocas)
+ return;
DenseMap<const AllocaInst *, AllocaLifetimeChecker> Checkers;
for (const auto &APC : PoisonCallVec)
Checkers[APC.AI].AddMarker(APC.InsBefore->getParent(), !APC.DoPoison);
OpenPOWER on IntegriCloud