Fix the order of destructors in LibLTOCodeGenerator

Summary:
The order of destructors in LTOCodeGenerator gets changed in r254696.
It is possible for LTOCodeGenerator to have a MergedModule created in
the OwnedContext, in which case the module must be destructed before
the context.

Reviewers: rafael, dexonsmith

Subscribers: llvm-commits, joker.eph

Differential Revision: http://reviews.llvm.org/D15346

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255092 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Steven Wu 2015-12-09 03:37:51 +00:00
parent 65422bf239
commit 1208ef58cc
2 changed files with 6 additions and 0 deletions

View File

@ -148,6 +148,8 @@ struct LTOCodeGenerator {
LLVMContext &getContext() { return Context; }
void resetMergedModule() { MergedModule.reset(); }
private:
void initializeLTOPasses();

View File

@ -124,6 +124,10 @@ struct LibLTOCodeGenerator : LTOCodeGenerator {
: LTOCodeGenerator(*Context), OwnedContext(std::move(Context)) {
setDiagnosticHandler(handleLibLTODiagnostic, nullptr); }
// Reset the module first in case MergedModule is created in OwnedContext.
// Module must be destructed before its context gets destructed.
~LibLTOCodeGenerator() { resetMergedModule(); }
std::unique_ptr<MemoryBuffer> NativeObjectFile;
std::unique_ptr<LLVMContext> OwnedContext;
};