diff options
author | Ted Kremenek <kremenek@apple.com> | 2011-03-19 01:00:36 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2011-03-19 01:00:36 +0000 |
commit | 4d96d9f0e758fb9244749f99d4b0a3ab1e3e0592 (patch) | |
tree | 13581675f260e4f7311176b252c0470ff40a29b5 | |
parent | af13d5b25b360e698cc1cf1055ad7d14e008e505 (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.cpp | 7 |
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 |