From f8e16c6f5a3a0d2cc6f7ae6dae0a8f55a89cfb2f Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Mon, 5 Aug 2013 11:11:11 +0000 Subject: [PATCH] Don't leak passes if added outside of the area determined by Started/Stopped flags. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187722 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/Passes.h | 3 ++- lib/CodeGen/Passes.cpp | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/llvm/CodeGen/Passes.h b/include/llvm/CodeGen/Passes.h index 98d1e0ae9e1..9b6f61e2f5e 100644 --- a/include/llvm/CodeGen/Passes.h +++ b/include/llvm/CodeGen/Passes.h @@ -308,7 +308,8 @@ protected: AnalysisID addPass(AnalysisID PassID); /// Add a pass to the PassManager if that pass is supposed to be run, as - /// determined by the StartAfter and StopAfter options. + /// determined by the StartAfter and StopAfter options. Takes ownership of the + /// pass. void addPass(Pass *P); /// addMachinePasses helper to create the target-selected or overriden diff --git a/lib/CodeGen/Passes.cpp b/lib/CodeGen/Passes.cpp index 203eec097f2..c0861c58fda 100644 --- a/lib/CodeGen/Passes.cpp +++ b/lib/CodeGen/Passes.cpp @@ -300,6 +300,8 @@ void TargetPassConfig::addPass(Pass *P) { if (Started && !Stopped) PM->add(P); + else + delete P; if (StopAfter == PassID) Stopped = true; if (StartAfter == PassID) -- 2.11.0