diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-10-22 17:50:19 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-10-22 17:50:19 +0000 |
commit | 89bd8d62f3c3305d4ec433307dc4c0b1df1d4be7 (patch) | |
tree | 80abf7c31dda4fb53511773fb0dc72324b862f6c /clang/lib/Sema/Sema.cpp | |
parent | db0856658810b47f29986a9a1dea5b6ae9ceab35 (diff) | |
download | bcm5719-llvm-89bd8d62f3c3305d4ec433307dc4c0b1df1d4be7.tar.gz bcm5719-llvm-89bd8d62f3c3305d4ec433307dc4c0b1df1d4be7.zip |
Reland r219810 "Fix late template parsing leak with incremental processing"
Original message:
Add a second late template parser callback meant to cleanup any
resources allocated by late template parsing. Call it from the
Sema::ActOnEndOfTranslationUnit method after all pending template
instantiations have been completed. Teach Parser::ParseTopLevelDecl to
install the cleanup callback when incremental processing is enabled so
that Parser::TemplateIds can be freed.
Patch by Brad King!
llvm-svn: 220400
Diffstat (limited to 'clang/lib/Sema/Sema.cpp')
-rw-r--r-- | clang/lib/Sema/Sema.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index aae2008957e..901b669e6d4 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -88,6 +88,7 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, CodeSegStack(nullptr), CurInitSeg(nullptr), VisContext(nullptr), IsBuildingRecoveryCallExpr(false), ExprNeedsCleanups(false), LateTemplateParser(nullptr), + LateTemplateParserCleanup(nullptr), OpaqueParser(nullptr), IdResolver(pp), StdInitializerList(nullptr), CXXTypeInfoDecl(nullptr), MSVCGuidDecl(nullptr), NSNumberDecl(nullptr), @@ -672,6 +673,9 @@ void Sema::ActOnEndOfTranslationUnit() { } PerformPendingInstantiations(); + if (LateTemplateParserCleanup) + LateTemplateParserCleanup(OpaqueParser); + CheckDelayedMemberExceptionSpecs(); } |