]> granicus.if.org Git - clang/commitdiff
Don't leak objects in load-from-ast path unless DisableFree is set.
authorNico Weber <nicolasweber@gmx.de>
Thu, 24 Apr 2014 02:42:04 +0000 (02:42 +0000)
committerNico Weber <nicolasweber@gmx.de>
Thu, 24 Apr 2014 02:42:04 +0000 (02:42 +0000)
Also update a comment to match a code change that was done in r110978.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207065 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/FrontendAction.cpp

index 6cbd8ba193e240d8bb79ee094f8e56e49b075795..4bb539c88a96e460a85a880011e00fbdef90cfda 100644 (file)
@@ -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();