File tree Expand file tree Collapse file tree 1 file changed +10
-0
lines changed Expand file tree Collapse file tree 1 file changed +10
-0
lines changed Original file line number Diff line number Diff line change @@ -579,6 +579,11 @@ ASTUnit *ASTUnit::LoadFromASTFile(const std::string &Filename,
579
579
580
580
Reader.reset (new ASTReader (AST->getSourceManager (), AST->getFileManager (),
581
581
AST->getDiagnostics ()));
582
+
583
+ // Recover resources if we crash before exiting this method.
584
+ llvm::CrashRecoveryContextCleanupRegistrar<ASTReader>
585
+ ReaderCleanup (Reader.get ());
586
+
582
587
Reader->setListener (new ASTInfoCollector (LangInfo, HeaderInfo, TargetTriple,
583
588
Predefines, Counter));
584
589
@@ -633,6 +638,11 @@ ASTUnit *ASTUnit::LoadFromASTFile(const std::string &Filename,
633
638
// AST file as needed.
634
639
ASTReader *ReaderPtr = Reader.get ();
635
640
llvm::OwningPtr<ExternalASTSource> Source (Reader.take ());
641
+
642
+ // Unregister the cleanup for ASTReader. It will get cleaned up
643
+ // by the ASTUnit cleanup.
644
+ ReaderCleanup.unregister ();
645
+
636
646
Context.setExternalSource (Source);
637
647
638
648
// Create an AST consumer, even though it isn't used.
You can’t perform that action at this time.
0 commit comments