forked from OSchip/llvm-project
Fix leak in lib/CodeGen/CGException.cpp, PR18318
Summary: This fixes the leak described in http://llvm.org/bugs/show_bug.cgi?id=18318 Reviewers: chandlerc, dblaikie Reviewed By: chandlerc CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2474 llvm-svn: 198857
This commit is contained in:
parent
006a05bcac
commit
ba4acedb69
|
@ -194,6 +194,15 @@ public:
|
||||||
return getHandlers()[I];
|
return getHandlers()[I];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear all handler blocks.
|
||||||
|
// FIXME: it's better to always call clearHandlerBlocks in DTOR and have a
|
||||||
|
// 'takeHandler' or some such function which removes ownership from the
|
||||||
|
// EHCatchScope object if the handlers should live longer than EHCatchScope.
|
||||||
|
void clearHandlerBlocks() {
|
||||||
|
for (unsigned I = 0, N = getNumHandlers(); I != N; ++I)
|
||||||
|
delete getHandler(I).Block;
|
||||||
|
}
|
||||||
|
|
||||||
typedef const Handler *iterator;
|
typedef const Handler *iterator;
|
||||||
iterator begin() const { return getHandlers(); }
|
iterator begin() const { return getHandlers(); }
|
||||||
iterator end() const { return getHandlers() + getNumHandlers(); }
|
iterator end() const { return getHandlers() + getNumHandlers(); }
|
||||||
|
|
|
@ -1244,6 +1244,7 @@ void CodeGenFunction::ExitCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock) {
|
||||||
|
|
||||||
// If the catch was not required, bail out now.
|
// If the catch was not required, bail out now.
|
||||||
if (!CatchScope.hasEHBranches()) {
|
if (!CatchScope.hasEHBranches()) {
|
||||||
|
CatchScope.clearHandlerBlocks();
|
||||||
EHStack.popCatch();
|
EHStack.popCatch();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue