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 | f75d089679018847fc6e05a95abbeae614d4f225 (patch) | |
| tree | f79cf3dc3f77911a0bc232bdb63b50ee938a397b /clang/lib/AST/RecordLayoutBuilder.cpp | |
| parent | ddc06d0bd0d58b75fb38939ecb0bfc2a5d40ca99 (diff) | |
| download | bcm5719-llvm-f75d089679018847fc6e05a95abbeae614d4f225.tar.gz bcm5719-llvm-f75d089679018847fc6e05a95abbeae614d4f225.zip | |
Recover memory from RecordLayoutBuilders during crashes.
llvm-svn: 127931
Diffstat (limited to 'clang/lib/AST/RecordLayoutBuilder.cpp')
| -rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 016b405fa01..a8ba8e24e75 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/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 | 

