From 7de358e93639369a011920618d3b08a7e2e57c70 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 24 Apr 2014 02:42:04 +0000 Subject: [PATCH] Don't leak objects in load-from-ast path unless DisableFree is set. Also update a comment to match a code change that was done in r110978. llvm-svn: 207065 --- clang/lib/Frontend/FrontendAction.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp index 6cbd8ba193e2..4bb539c88a96 100644 --- a/clang/lib/Frontend/FrontendAction.cpp +++ b/clang/lib/Frontend/FrontendAction.cpp @@ -408,16 +408,16 @@ void FrontendAction::EndSourceFile() { // Finalize the action. EndSourceFileAction(); - // Release the consumer and the AST, in that order since the consumer may - // perform actions in its destructor which require the context. + // Sema references the ast consumer, so reset sema first. // // FIXME: There is more per-file stuff we could just drop here? - if (CI.getFrontendOpts().DisableFree) { - BuryPointer(CI.takeASTConsumer()); + bool DisableFree = CI.getFrontendOpts().DisableFree; + if (DisableFree) { if (!isCurrentFileAST()) { CI.resetAndLeakSema(); CI.resetAndLeakASTContext(); } + BuryPointer(CI.takeASTConsumer()); } else { if (!isCurrentFileAST()) { CI.setSema(0); @@ -443,7 +443,7 @@ void FrontendAction::EndSourceFile() { // FrontendAction. CI.clearOutputFiles(/*EraseFiles=*/shouldEraseOutputFiles()); - if (isCurrentFileAST()) { + if (DisableFree && isCurrentFileAST()) { CI.resetAndLeakSema(); CI.resetAndLeakASTContext(); CI.resetAndLeakPreprocessor();