diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-03-11 18:04:49 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-03-11 18:04:49 +0000 |
commit | 9d44023453094832ada2770941e9e4c96ce0e75e (patch) | |
tree | cca4f01787533d995f043cf0f07d50b55851fd68 | |
parent | f2b552e60d4701a0f8aa99ee669fd803fe5e888c (diff) |
Driver: Free jobs in JobList and PipedJob instances.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98261 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Driver/Job.h | 4 | ||||
-rw-r--r-- | lib/Driver/Job.cpp | 10 |
2 files changed, 14 insertions, 0 deletions
diff --git a/include/clang/Driver/Job.h b/include/clang/Driver/Job.h index 74ca083417..5a789fbb8f 100644 --- a/include/clang/Driver/Job.h +++ b/include/clang/Driver/Job.h @@ -100,7 +100,9 @@ private: public: PipedJob(); + virtual ~PipedJob(); + /// Add a command to the piped job (taking ownership). void addCommand(Command *C) { Commands.push_back(C); } const list_type &getCommands() const { return Commands; } @@ -130,7 +132,9 @@ private: public: JobList(); + virtual ~JobList(); + /// Add a job to the list (taking ownership). void addJob(Job *J) { Jobs.push_back(J); } const list_type &getJobs() const { return Jobs; } diff --git a/lib/Driver/Job.cpp b/lib/Driver/Job.cpp index 1bd123e220..bfeb41a942 100644 --- a/lib/Driver/Job.cpp +++ b/lib/Driver/Job.cpp @@ -23,8 +23,18 @@ Command::Command(const Action &_Source, const Tool &_Creator, PipedJob::PipedJob() : Job(PipedJobClass) {} +PipedJob::~PipedJob() { + for (iterator it = begin(), ie = end(); it != ie; ++it) + delete *it; +} + JobList::JobList() : Job(JobListClass) {} +JobList::~JobList() { + for (iterator it = begin(), ie = end(); it != ie; ++it) + delete *it; +} + void Job::addCommand(Command *C) { if (PipedJob *PJ = dyn_cast<PipedJob>(this)) PJ->addCommand(C); |