From 715149a6ccbf60184a865c7ba40c5395239b5bc7 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 15 Oct 2014 17:22:56 +0000 Subject: [PATCH] Revert "Fix late template parsing leak with incremental processing" This reverts commit r219810. The test suite appears broken. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219813 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Parse/Parser.h | 1 - include/clang/Sema/Sema.h | 7 +--- lib/Parse/Parser.cpp | 12 +----- lib/Sema/Sema.cpp | 3 -- unittests/Frontend/FrontendActionTest.cpp | 49 ++--------------------- 5 files changed, 6 insertions(+), 66 deletions(-) diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index 6d533961cd..5aaa6cab91 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -1155,7 +1155,6 @@ private: void ParseLateTemplatedFuncDef(LateParsedTemplate &LPT); static void LateTemplateParserCallback(void *P, LateParsedTemplate &LPT); - static void LateTemplateParserCleanupCallback(void *P); Sema::ParsingClassState PushParsingClass(Decl *TagOrTemplate, bool TopLevelClass, bool IsInterface); diff --git a/include/clang/Sema/Sema.h b/include/clang/Sema/Sema.h index bda327fc95..4cd4c57c33 100644 --- a/include/clang/Sema/Sema.h +++ b/include/clang/Sema/Sema.h @@ -480,16 +480,11 @@ public: /// \brief Callback to the parser to parse templated functions when needed. typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT); - typedef void LateTemplateParserCleanupCB(void *P); LateTemplateParserCB *LateTemplateParser; - LateTemplateParserCleanupCB *LateTemplateParserCleanup; void *OpaqueParser; - void SetLateTemplateParser(LateTemplateParserCB *LTP, - LateTemplateParserCleanupCB *LTPCleanup, - void *P) { + void SetLateTemplateParser(LateTemplateParserCB *LTP, void *P) { LateTemplateParser = LTP; - LateTemplateParserCleanup = LTPCleanup; OpaqueParser = P; } diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index fabfe218a4..5a0653026f 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -510,13 +510,6 @@ namespace { }; } -void Parser::LateTemplateParserCleanupCallback(void *P) { - // While this RAII helper doesn't bracket any actual work, the destructor will - // clean up annotations that were created during ActOnEndOfTranslationUnit - // when incremental processing is enabled. - DestroyTemplateIdAnnotationsRAIIObj CleanupRAII(((Parser *)P)->TemplateIds); -} - /// ParseTopLevelDecl - Parse one top-level declaration, return whatever the /// action tells us to. This returns true if the EOF was encountered. bool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result) { @@ -549,10 +542,7 @@ bool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result) { case tok::eof: // Late template parsing can begin. if (getLangOpts().DelayedTemplateParsing) - Actions.SetLateTemplateParser(LateTemplateParserCallback, - PP.isIncrementalProcessingEnabled() ? - LateTemplateParserCleanupCallback : nullptr, - this); + Actions.SetLateTemplateParser(LateTemplateParserCallback, this); if (!PP.isIncrementalProcessingEnabled()) Actions.ActOnEndOfTranslationUnit(); //else don't tell Sema that we ended parsing: more input might come. diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp index 70e4eaab8e..aae2008957 100644 --- a/lib/Sema/Sema.cpp +++ b/lib/Sema/Sema.cpp @@ -672,9 +672,6 @@ void Sema::ActOnEndOfTranslationUnit() { } PerformPendingInstantiations(); - if (LateTemplateParserCleanup) - LateTemplateParserCleanup(OpaqueParser); - CheckDelayedMemberExceptionSpecs(); } diff --git a/unittests/Frontend/FrontendActionTest.cpp b/unittests/Frontend/FrontendActionTest.cpp index 9973d3f8be..3171156692 100644 --- a/unittests/Frontend/FrontendActionTest.cpp +++ b/unittests/Frontend/FrontendActionTest.cpp @@ -14,7 +14,6 @@ #include "clang/Frontend/CompilerInstance.h" #include "clang/Frontend/CompilerInvocation.h" #include "clang/Lex/Preprocessor.h" -#include "clang/Sema/Sema.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/MemoryBuffer.h" #include "gtest/gtest.h" @@ -26,13 +25,10 @@ namespace { class TestASTFrontendAction : public ASTFrontendAction { public: - TestASTFrontendAction(bool enableIncrementalProcessing = false, - bool actOnEndOfTranslationUnit = false) - : EnableIncrementalProcessing(enableIncrementalProcessing), - ActOnEndOfTranslationUnit(actOnEndOfTranslationUnit) { } + TestASTFrontendAction(bool enableIncrementalProcessing = false) + : EnableIncrementalProcessing(enableIncrementalProcessing) { } bool EnableIncrementalProcessing; - bool ActOnEndOfTranslationUnit; std::vector decl_names; virtual bool BeginSourceFileAction(CompilerInstance &ci, StringRef filename) { @@ -44,22 +40,15 @@ public: virtual std::unique_ptr CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { - return llvm::make_unique(CI, ActOnEndOfTranslationUnit, - decl_names); + return llvm::make_unique(decl_names); } private: class Visitor : public ASTConsumer, public RecursiveASTVisitor { public: - Visitor(CompilerInstance &ci, bool actOnEndOfTranslationUnit, - std::vector &decl_names) : - CI(ci), ActOnEndOfTranslationUnit(actOnEndOfTranslationUnit), - decl_names_(decl_names) {} + Visitor(std::vector &decl_names) : decl_names_(decl_names) {} virtual void HandleTranslationUnit(ASTContext &context) { - if (ActOnEndOfTranslationUnit) { - CI.getSema().ActOnEndOfTranslationUnit(); - } TraverseDecl(context.getTranslationUnitDecl()); } @@ -69,8 +58,6 @@ private: } private: - CompilerInstance &CI; - bool ActOnEndOfTranslationUnit; std::vector &decl_names_; }; }; @@ -115,34 +102,6 @@ TEST(ASTFrontendAction, IncrementalParsing) { EXPECT_EQ("x", test_action.decl_names[1]); } -TEST(ASTFrontendAction, LateTemplateIncrementalParsing) { - CompilerInvocation *invocation = new CompilerInvocation; - invocation->getLangOpts()->CPlusPlus = true; - invocation->getLangOpts()->DelayedTemplateParsing = true; - invocation->getPreprocessorOpts().addRemappedFile( - "test.cc", MemoryBuffer::getMemBuffer( - "template struct A { A(T); T data; };\n" - "template struct B: public A {\n" - " B();\n" - " B(B const& b): A(b.data) {}\n" - "};\n" - "B c() { return B(); }\n").release()); - invocation->getFrontendOpts().Inputs.push_back(FrontendInputFile("test.cc", - IK_CXX)); - invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; - invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance compiler; - compiler.setInvocation(invocation); - compiler.createDiagnostics(); - - TestASTFrontendAction test_action(/*enableIncrementalProcessing=*/true, - /*actOnEndOfTranslationUnit=*/true); - ASSERT_TRUE(compiler.ExecuteAction(test_action)); - ASSERT_EQ(13U, test_action.decl_names.size()); - EXPECT_EQ("A", test_action.decl_names[0]); - EXPECT_EQ("c", test_action.decl_names[12]); -} - struct TestPPCallbacks : public PPCallbacks { TestPPCallbacks() : SeenEnd(false) {} -- 2.40.0