aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/Driver/Job.h4
-rw-r--r--lib/Driver/Job.cpp10
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);