aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2011-03-19 01:00:36 +0000
committerTed Kremenek <kremenek@apple.com>2011-03-19 01:00:36 +0000
commit4d96d9f0e758fb9244749f99d4b0a3ab1e3e0592 (patch)
tree13581675f260e4f7311176b252c0470ff40a29b5
parentaf13d5b25b360e698cc1cf1055ad7d14e008e505 (diff)
Recover memory from RecordLayoutBuilders during crashes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127931 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/AST/RecordLayoutBuilder.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/AST/RecordLayoutBuilder.cpp b/lib/AST/RecordLayoutBuilder.cpp
index 016b405fa0..a8ba8e24e7 100644
--- a/lib/AST/RecordLayoutBuilder.cpp
+++ b/lib/AST/RecordLayoutBuilder.cpp
@@ -19,7 +19,7 @@
#include "llvm/Support/Format.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/Support/MathExtras.h"
-#include <map>
+#include "llvm/Support/CrashRecoveryContext.h"
using namespace clang;
@@ -1708,6 +1708,11 @@ ASTContext::getASTRecordLayout(const RecordDecl *D) const {
case CXXABI_Microsoft:
Builder.reset(new MSRecordLayoutBuilder(*this, &EmptySubobjects));
}
+ // Recover resources if we crash before exiting this method.
+ llvm::CrashRecoveryContextCleanupRegistrar
+ RecordBuilderCleanup(llvm::CrashRecoveryContextCleanup::
+ create<RecordLayoutBuilder>(Builder.get()));
+
Builder->Layout(RD);
// FIXME: This is not always correct. See the part about bitfields at