Author: lebedevri Date: Tue Feb 27 07:19:20 2018 New Revision: 326201 URL: http://llvm.org/viewvc/llvm-project?rev=326201&view=rev Log: [Tooling] [0/1] Refactor FrontendActionFactory::create() to return std::unique_ptr<>
Summary: Noticed during review of D41102. I'm not sure whether there are any principal reasons why it returns raw owning pointer, or it is just a old code that was not updated post-C++11. I'm not too sure what testing i should do, because `check-all` is not error clean here for some reason, but it does not //appear// asif those failures are related to these changes. This is clang part. Clang-tools-extra part is D43780. Reviewers: klimek, bkramer, alexfh, pcc Reviewed By: alexfh Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D43779 Modified: cfe/trunk/docs/LibTooling.rst cfe/trunk/docs/RAVFrontendAction.rst cfe/trunk/include/clang/Tooling/Tooling.h cfe/trunk/lib/Tooling/Tooling.cpp cfe/trunk/tools/clang-refactor/ClangRefactor.cpp cfe/trunk/unittests/AST/EvaluateAsRValueTest.cpp cfe/trunk/unittests/CrossTU/CrossTranslationUnitTest.cpp cfe/trunk/unittests/Sema/CodeCompleteTest.cpp cfe/trunk/unittests/Sema/ExternalSemaSourceTest.cpp cfe/trunk/unittests/Tooling/CommentHandlerTest.cpp cfe/trunk/unittests/Tooling/ExecutionTest.cpp cfe/trunk/unittests/Tooling/RefactoringTest.cpp cfe/trunk/unittests/Tooling/TestVisitor.h cfe/trunk/unittests/Tooling/ToolingTest.cpp Modified: cfe/trunk/docs/LibTooling.rst URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LibTooling.rst?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/docs/LibTooling.rst (original) +++ cfe/trunk/docs/LibTooling.rst Tue Feb 27 07:19:20 2018 @@ -34,7 +34,7 @@ looked for. Let me give you an example: TEST(runToolOnCode, CanSyntaxCheckCode) { // runToolOnCode returns whether the action was correctly run over the // given code. - EXPECT_TRUE(runToolOnCode(new clang::SyntaxOnlyAction, "class X {};")); + EXPECT_TRUE(runToolOnCode(llvm::make_unique<clang::SyntaxOnlyAction>(), "class X {};")); } Writing a standalone tool Modified: cfe/trunk/docs/RAVFrontendAction.rst URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/RAVFrontendAction.rst?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/docs/RAVFrontendAction.rst (original) +++ cfe/trunk/docs/RAVFrontendAction.rst Tue Feb 27 07:19:20 2018 @@ -196,7 +196,7 @@ Now we can combine all of the above into int main(int argc, char **argv) { if (argc > 1) { - clang::tooling::runToolOnCode(new FindNamedClassAction, argv[1]); + clang::tooling::runToolOnCode(llvm::make_unique<FindNamedClassAction>(), argv[1]); } } Modified: cfe/trunk/include/clang/Tooling/Tooling.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Tooling.h?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/include/clang/Tooling/Tooling.h (original) +++ cfe/trunk/include/clang/Tooling/Tooling.h Tue Feb 27 07:19:20 2018 @@ -94,7 +94,7 @@ public: /// \brief Returns a new clang::FrontendAction. /// /// The caller takes ownership of the returned action. - virtual clang::FrontendAction *create() = 0; + virtual std::unique_ptr<clang::FrontendAction> create() = 0; }; /// \brief Returns a new FrontendActionFactory for a given type. @@ -149,8 +149,8 @@ inline std::unique_ptr<FrontendActionFac /// clang modules. /// /// \return - True if 'ToolAction' was successfully executed. -bool runToolOnCode(clang::FrontendAction *ToolAction, const Twine &Code, - const Twine &FileName = "input.cc", +bool runToolOnCode(std::unique_ptr<FrontendAction> ToolAction, + const Twine &Code, const Twine &FileName = "input.cc", std::shared_ptr<PCHContainerOperations> PCHContainerOps = std::make_shared<PCHContainerOperations>()); @@ -172,7 +172,7 @@ typedef std::vector<std::pair<std::strin /// /// \return - True if 'ToolAction' was successfully executed. bool runToolOnCodeWithArgs( - clang::FrontendAction *ToolAction, const Twine &Code, + std::unique_ptr<FrontendAction> ToolAction, const Twine &Code, const std::vector<std::string> &Args, const Twine &FileName = "input.cc", const Twine &ToolName = "clang-tool", std::shared_ptr<PCHContainerOperations> PCHContainerOps = @@ -226,8 +226,8 @@ public: /// ownership. /// \param PCHContainerOps The PCHContainerOperations for loading and creating /// clang modules. - ToolInvocation(std::vector<std::string> CommandLine, FrontendAction *FAction, - FileManager *Files, + ToolInvocation(std::vector<std::string> CommandLine, + std::unique_ptr<FrontendAction> FAction, FileManager *Files, std::shared_ptr<PCHContainerOperations> PCHContainerOps = std::make_shared<PCHContainerOperations>()); @@ -367,7 +367,9 @@ template <typename T> std::unique_ptr<FrontendActionFactory> newFrontendActionFactory() { class SimpleFrontendActionFactory : public FrontendActionFactory { public: - clang::FrontendAction *create() override { return new T; } + std::unique_ptr<clang::FrontendAction> create() override { + return llvm::make_unique<T>(); + } }; return std::unique_ptr<FrontendActionFactory>( @@ -383,8 +385,9 @@ inline std::unique_ptr<FrontendActionFac SourceFileCallbacks *Callbacks) : ConsumerFactory(ConsumerFactory), Callbacks(Callbacks) {} - clang::FrontendAction *create() override { - return new ConsumerFactoryAdaptor(ConsumerFactory, Callbacks); + std::unique_ptr<clang::FrontendAction> create() override { + return llvm::make_unique<ConsumerFactoryAdaptor>(ConsumerFactory, + Callbacks); } private: Modified: cfe/trunk/lib/Tooling/Tooling.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Tooling.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/lib/Tooling/Tooling.cpp (original) +++ cfe/trunk/lib/Tooling/Tooling.cpp Tue Feb 27 07:19:20 2018 @@ -104,12 +104,12 @@ clang::CompilerInvocation *newInvocation return Invocation; } -bool runToolOnCode(clang::FrontendAction *ToolAction, const Twine &Code, - const Twine &FileName, +bool runToolOnCode(std::unique_ptr<FrontendAction> ToolAction, + const Twine &Code, const Twine &FileName, std::shared_ptr<PCHContainerOperations> PCHContainerOps) { - return runToolOnCodeWithArgs(ToolAction, Code, std::vector<std::string>(), - FileName, "clang-tool", - std::move(PCHContainerOps)); + return runToolOnCodeWithArgs(std::move(ToolAction), Code, + std::vector<std::string>(), FileName, + "clang-tool", std::move(PCHContainerOps)); } static std::vector<std::string> @@ -125,7 +125,7 @@ getSyntaxOnlyToolArgs(const Twine &ToolN } bool runToolOnCodeWithArgs( - clang::FrontendAction *ToolAction, const Twine &Code, + std::unique_ptr<FrontendAction> ToolAction, const Twine &Code, const std::vector<std::string> &Args, const Twine &FileName, const Twine &ToolName, std::shared_ptr<PCHContainerOperations> PCHContainerOps, @@ -143,8 +143,7 @@ bool runToolOnCodeWithArgs( ArgumentsAdjuster Adjuster = getClangStripDependencyFileAdjuster(); ToolInvocation Invocation( getSyntaxOnlyToolArgs(ToolName, Adjuster(Args, FileNameRef), FileNameRef), - ToolAction, Files.get(), - std::move(PCHContainerOps)); + std::move(ToolAction), Files.get(), std::move(PCHContainerOps)); SmallString<1024> CodeStorage; InMemoryFileSystem->addFile(FileNameRef, 0, @@ -204,15 +203,18 @@ void addTargetAndModeForProgramName(std: namespace { class SingleFrontendActionFactory : public FrontendActionFactory { - FrontendAction *Action; + std::unique_ptr<clang::FrontendAction> Action; public: - SingleFrontendActionFactory(FrontendAction *Action) : Action(Action) {} + SingleFrontendActionFactory(std::unique_ptr<clang::FrontendAction> Action) + : Action(std::move(Action)) {} - FrontendAction *create() override { return Action; } + std::unique_ptr<clang::FrontendAction> create() override { + return std::move(Action); + } }; -} +} // namespace ToolInvocation::ToolInvocation( std::vector<std::string> CommandLine, ToolAction *Action, @@ -222,12 +224,13 @@ ToolInvocation::ToolInvocation( DiagConsumer(nullptr) {} ToolInvocation::ToolInvocation( - std::vector<std::string> CommandLine, FrontendAction *FAction, - FileManager *Files, std::shared_ptr<PCHContainerOperations> PCHContainerOps) + std::vector<std::string> CommandLine, + std::unique_ptr<FrontendAction> FAction, FileManager *Files, + std::shared_ptr<PCHContainerOperations> PCHContainerOps) : CommandLine(std::move(CommandLine)), - Action(new SingleFrontendActionFactory(FAction)), OwnsAction(true), - Files(Files), PCHContainerOps(std::move(PCHContainerOps)), - DiagConsumer(nullptr) {} + Action(new SingleFrontendActionFactory(std::move(FAction))), + OwnsAction(true), Files(Files), + PCHContainerOps(std::move(PCHContainerOps)), DiagConsumer(nullptr) {} ToolInvocation::~ToolInvocation() { if (OwnsAction) Modified: cfe/trunk/tools/clang-refactor/ClangRefactor.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-refactor/ClangRefactor.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/tools/clang-refactor/ClangRefactor.cpp (original) +++ cfe/trunk/tools/clang-refactor/ClangRefactor.cpp Tue Feb 27 07:19:20 2018 @@ -462,7 +462,9 @@ public: ToolActionFactory(TUCallbackType Callback) : Callback(std::move(Callback)) {} - FrontendAction *create() override { return new ToolASTAction(Callback); } + std::unique_ptr<FrontendAction> create() override { + return llvm::make_unique<ToolASTAction>(Callback); + } private: TUCallbackType Callback; Modified: cfe/trunk/unittests/AST/EvaluateAsRValueTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/EvaluateAsRValueTest.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/AST/EvaluateAsRValueTest.cpp (original) +++ cfe/trunk/unittests/AST/EvaluateAsRValueTest.cpp Tue Feb 27 07:19:20 2018 @@ -90,7 +90,7 @@ TEST(EvaluateAsRValue, FailsGracefullyFo std::vector<std::string> Args(1, Mode); Args.push_back("-fno-delayed-template-parsing"); ASSERT_TRUE(runToolOnCodeWithArgs( - new EvaluateConstantInitializersAction(), + llvm::make_unique<EvaluateConstantInitializersAction>(), "template <typename T>" "struct vector {" " explicit vector(int size);" Modified: cfe/trunk/unittests/CrossTU/CrossTranslationUnitTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/CrossTU/CrossTranslationUnitTest.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/CrossTU/CrossTranslationUnitTest.cpp (original) +++ cfe/trunk/unittests/CrossTU/CrossTranslationUnitTest.cpp Tue Feb 27 07:19:20 2018 @@ -103,7 +103,8 @@ private: TEST(CrossTranslationUnit, CanLoadFunctionDefinition) { bool Success = false; - EXPECT_TRUE(tooling::runToolOnCode(new CTUAction(&Success), "int f(int);")); + EXPECT_TRUE(tooling::runToolOnCode(llvm::make_unique<CTUAction>(&Success), + "int f(int);")); EXPECT_TRUE(Success); } Modified: cfe/trunk/unittests/Sema/CodeCompleteTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Sema/CodeCompleteTest.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/Sema/CodeCompleteTest.cpp (original) +++ cfe/trunk/unittests/Sema/CodeCompleteTest.cpp Tue Feb 27 07:19:20 2018 @@ -100,7 +100,7 @@ VisitedContextResults runCodeCompleteOnC auto Action = llvm::make_unique<CodeCompleteAction>( offsetToPosition(WithoutToken, TokenOffset), Results); - clang::tooling::runToolOnCodeWithArgs(Action.release(), Code, {"-std=c++11"}, + clang::tooling::runToolOnCodeWithArgs(std::move(Action), Code, {"-std=c++11"}, TestCCName); return Results; } Modified: cfe/trunk/unittests/Sema/ExternalSemaSourceTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Sema/ExternalSemaSourceTest.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/Sema/ExternalSemaSourceTest.cpp (original) +++ cfe/trunk/unittests/Sema/ExternalSemaSourceTest.cpp Tue Feb 27 07:19:20 2018 @@ -221,28 +221,26 @@ public: // Make sure that the DiagnosticWatcher is not miscounting. TEST(ExternalSemaSource, SanityCheck) { - std::unique_ptr<ExternalSemaSourceInstaller> Installer( - new ExternalSemaSourceInstaller); + auto Installer = llvm::make_unique<ExternalSemaSourceInstaller>(); DiagnosticWatcher Watcher("AAB", "BBB"); Installer->PushWatcher(&Watcher); std::vector<std::string> Args(1, "-std=c++11"); ASSERT_TRUE(clang::tooling::runToolOnCodeWithArgs( - Installer.release(), "namespace AAA { } using namespace AAB;", Args)); + std::move(Installer), "namespace AAA { } using namespace AAB;", Args)); ASSERT_EQ(0, Watcher.SeenCount); } // Check that when we add a NamespaceTypeProvider, we use that suggestion // instead of the usual suggestion we would use above. TEST(ExternalSemaSource, ExternalTypoCorrectionPrioritized) { - std::unique_ptr<ExternalSemaSourceInstaller> Installer( - new ExternalSemaSourceInstaller); + auto Installer = llvm::make_unique<ExternalSemaSourceInstaller>(); NamespaceTypoProvider Provider("AAB", "BBB"); DiagnosticWatcher Watcher("AAB", "BBB"); Installer->PushSource(&Provider); Installer->PushWatcher(&Watcher); std::vector<std::string> Args(1, "-std=c++11"); ASSERT_TRUE(clang::tooling::runToolOnCodeWithArgs( - Installer.release(), "namespace AAA { } using namespace AAB;", Args)); + std::move(Installer), "namespace AAA { } using namespace AAB;", Args)); ASSERT_LE(0, Provider.CallCount); ASSERT_EQ(1, Watcher.SeenCount); } @@ -250,8 +248,7 @@ TEST(ExternalSemaSource, ExternalTypoCor // Check that we use the first successful TypoCorrection returned from an // ExternalSemaSource. TEST(ExternalSemaSource, ExternalTypoCorrectionOrdering) { - std::unique_ptr<ExternalSemaSourceInstaller> Installer( - new ExternalSemaSourceInstaller); + auto Installer = llvm::make_unique<ExternalSemaSourceInstaller>(); NamespaceTypoProvider First("XXX", "BBB"); NamespaceTypoProvider Second("AAB", "CCC"); NamespaceTypoProvider Third("AAB", "DDD"); @@ -262,7 +259,7 @@ TEST(ExternalSemaSource, ExternalTypoCor Installer->PushWatcher(&Watcher); std::vector<std::string> Args(1, "-std=c++11"); ASSERT_TRUE(clang::tooling::runToolOnCodeWithArgs( - Installer.release(), "namespace AAA { } using namespace AAB;", Args)); + std::move(Installer), "namespace AAA { } using namespace AAB;", Args)); ASSERT_LE(1, First.CallCount); ASSERT_LE(1, Second.CallCount); ASSERT_EQ(0, Third.CallCount); @@ -270,15 +267,14 @@ TEST(ExternalSemaSource, ExternalTypoCor } TEST(ExternalSemaSource, ExternalDelayedTypoCorrection) { - std::unique_ptr<ExternalSemaSourceInstaller> Installer( - new ExternalSemaSourceInstaller); + auto Installer = llvm::make_unique<ExternalSemaSourceInstaller>(); FunctionTypoProvider Provider("aaa", "bbb"); DiagnosticWatcher Watcher("aaa", "bbb"); Installer->PushSource(&Provider); Installer->PushWatcher(&Watcher); std::vector<std::string> Args(1, "-std=c++11"); ASSERT_TRUE(clang::tooling::runToolOnCodeWithArgs( - Installer.release(), "namespace AAA { } void foo() { AAA::aaa(); }", + std::move(Installer), "namespace AAA { } void foo() { AAA::aaa(); }", Args)); ASSERT_LE(0, Provider.CallCount); ASSERT_EQ(1, Watcher.SeenCount); @@ -287,15 +283,14 @@ TEST(ExternalSemaSource, ExternalDelayed // We should only try MaybeDiagnoseMissingCompleteType if we can't otherwise // solve the problem. TEST(ExternalSemaSource, TryOtherTacticsBeforeDiagnosing) { - std::unique_ptr<ExternalSemaSourceInstaller> Installer( - new ExternalSemaSourceInstaller); + auto Installer = llvm::make_unique<ExternalSemaSourceInstaller>(); CompleteTypeDiagnoser Diagnoser(false); Installer->PushSource(&Diagnoser); std::vector<std::string> Args(1, "-std=c++11"); // This code hits the class template specialization/class member of a class // template specialization checks in Sema::RequireCompleteTypeImpl. ASSERT_TRUE(clang::tooling::runToolOnCodeWithArgs( - Installer.release(), + std::move(Installer), "template <typename T> struct S { class C { }; }; S<char>::C SCInst;", Args)); ASSERT_EQ(0, Diagnoser.CallCount); @@ -304,8 +299,7 @@ TEST(ExternalSemaSource, TryOtherTactics // The first ExternalSemaSource where MaybeDiagnoseMissingCompleteType returns // true should be the last one called. TEST(ExternalSemaSource, FirstDiagnoserTaken) { - std::unique_ptr<ExternalSemaSourceInstaller> Installer( - new ExternalSemaSourceInstaller); + auto Installer = llvm::make_unique<ExternalSemaSourceInstaller>(); CompleteTypeDiagnoser First(false); CompleteTypeDiagnoser Second(true); CompleteTypeDiagnoser Third(true); @@ -314,7 +308,7 @@ TEST(ExternalSemaSource, FirstDiagnoserT Installer->PushSource(&Third); std::vector<std::string> Args(1, "-std=c++11"); ASSERT_FALSE(clang::tooling::runToolOnCodeWithArgs( - Installer.release(), "class Incomplete; Incomplete IncompleteInstance;", + std::move(Installer), "class Incomplete; Incomplete IncompleteInstance;", Args)); ASSERT_EQ(1, First.CallCount); ASSERT_EQ(1, Second.CallCount); Modified: cfe/trunk/unittests/Tooling/CommentHandlerTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/CommentHandlerTest.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/Tooling/CommentHandlerTest.cpp (original) +++ cfe/trunk/unittests/Tooling/CommentHandlerTest.cpp Tue Feb 27 07:19:20 2018 @@ -56,8 +56,8 @@ public: CommentVerifier GetVerifier(); protected: - ASTFrontendAction *CreateTestAction() override { - return new CommentHandlerAction(this); + std::unique_ptr<FrontendAction> CreateTestAction() override { + return llvm::make_unique<CommentHandlerAction>(this); } private: Modified: cfe/trunk/unittests/Tooling/ExecutionTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/ExecutionTest.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/Tooling/ExecutionTest.cpp (original) +++ cfe/trunk/unittests/Tooling/ExecutionTest.cpp Tue Feb 27 07:19:20 2018 @@ -79,7 +79,9 @@ private: class ReportResultActionFactory : public FrontendActionFactory { public: ReportResultActionFactory(ExecutionContext *Context) : Context(Context) {} - FrontendAction *create() override { return new ReportResultAction(Context); } + std::unique_ptr<FrontendAction> create() override { + return llvm::make_unique<ReportResultAction>(Context); + } private: ExecutionContext *const Context; Modified: cfe/trunk/unittests/Tooling/RefactoringTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/RefactoringTest.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/Tooling/RefactoringTest.cpp (original) +++ cfe/trunk/unittests/Tooling/RefactoringTest.cpp Tue Feb 27 07:19:20 2018 @@ -650,7 +650,7 @@ template <typename T> class TestVisitor : public clang::RecursiveASTVisitor<T> { public: bool runOver(StringRef Code) { - return runToolOnCode(new TestAction(this), Code); + return runToolOnCode(llvm::make_unique<TestAction>(this), Code); } protected: Modified: cfe/trunk/unittests/Tooling/TestVisitor.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/TestVisitor.h?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/Tooling/TestVisitor.h (original) +++ cfe/trunk/unittests/Tooling/TestVisitor.h Tue Feb 27 07:19:20 2018 @@ -82,8 +82,8 @@ public: } protected: - virtual ASTFrontendAction* CreateTestAction() { - return new TestAction(this); + virtual std::unique_ptr<FrontendAction> CreateTestAction() { + return llvm::make_unique<TestAction>(this); } class FindConsumer : public ASTConsumer { Modified: cfe/trunk/unittests/Tooling/ToolingTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/ToolingTest.cpp?rev=326201&r1=326200&r2=326201&view=diff ============================================================================== --- cfe/trunk/unittests/Tooling/ToolingTest.cpp (original) +++ cfe/trunk/unittests/Tooling/ToolingTest.cpp Tue Feb 27 07:19:20 2018 @@ -64,10 +64,10 @@ class FindTopLevelDeclConsumer : public TEST(runToolOnCode, FindsNoTopLevelDeclOnEmptyCode) { bool FoundTopLevelDecl = false; - EXPECT_TRUE( - runToolOnCode(new TestAction(llvm::make_unique<FindTopLevelDeclConsumer>( - &FoundTopLevelDecl)), - "")); + EXPECT_TRUE(runToolOnCode( + llvm::make_unique<TestAction>( + llvm::make_unique<FindTopLevelDeclConsumer>(&FoundTopLevelDecl)), + "")); EXPECT_FALSE(FoundTopLevelDecl); } @@ -104,17 +104,17 @@ bool FindClassDeclX(ASTUnit *AST) { TEST(runToolOnCode, FindsClassDecl) { bool FoundClassDeclX = false; - EXPECT_TRUE( - runToolOnCode(new TestAction(llvm::make_unique<FindClassDeclXConsumer>( - &FoundClassDeclX)), - "class X;")); + EXPECT_TRUE(runToolOnCode( + llvm::make_unique<TestAction>( + llvm::make_unique<FindClassDeclXConsumer>(&FoundClassDeclX)), + "class X;")); EXPECT_TRUE(FoundClassDeclX); FoundClassDeclX = false; - EXPECT_TRUE( - runToolOnCode(new TestAction(llvm::make_unique<FindClassDeclXConsumer>( - &FoundClassDeclX)), - "class Y;")); + EXPECT_TRUE(runToolOnCode( + llvm::make_unique<TestAction>( + llvm::make_unique<FindClassDeclXConsumer>(&FoundClassDeclX)), + "class Y;")); EXPECT_FALSE(FoundClassDeclX); } @@ -162,8 +162,8 @@ TEST(ToolInvocation, TestMapVirtualFile) Args.push_back("-Idef"); Args.push_back("-fsyntax-only"); Args.push_back("test.cpp"); - clang::tooling::ToolInvocation Invocation(Args, new SyntaxOnlyAction, - Files.get()); + clang::tooling::ToolInvocation Invocation( + Args, llvm::make_unique<SyntaxOnlyAction>(), Files.get()); InMemoryFileSystem->addFile( "test.cpp", 0, llvm::MemoryBuffer::getMemBuffer("#include <abc>\n")); InMemoryFileSystem->addFile("def/abc", 0, @@ -188,8 +188,8 @@ TEST(ToolInvocation, TestVirtualModulesC Args.push_back("-Idef"); Args.push_back("-fsyntax-only"); Args.push_back("test.cpp"); - clang::tooling::ToolInvocation Invocation(Args, new SyntaxOnlyAction, - Files.get()); + clang::tooling::ToolInvocation Invocation( + Args, llvm::make_unique<SyntaxOnlyAction>(), Files.get()); InMemoryFileSystem->addFile( "test.cpp", 0, llvm::MemoryBuffer::getMemBuffer("#include <abc>\n")); InMemoryFileSystem->addFile("def/abc", 0, @@ -259,61 +259,64 @@ TEST(runToolOnCode, TestSkipFunctionBody std::vector<std::string> Args = {"-std=c++11"}; std::vector<std::string> Args2 = {"-fno-delayed-template-parsing"}; - EXPECT_TRUE(runToolOnCode(new SkipBodyAction, + EXPECT_TRUE(runToolOnCode(llvm::make_unique<SkipBodyAction>(), "int skipMe() { an_error_here }")); - EXPECT_FALSE(runToolOnCode(new SkipBodyAction, + EXPECT_FALSE(runToolOnCode(llvm::make_unique<SkipBodyAction>(), "int skipMeNot() { an_error_here }")); // Test constructors with initializers EXPECT_TRUE(runToolOnCodeWithArgs( - new SkipBodyAction, + llvm::make_unique<SkipBodyAction>(), "struct skipMe { skipMe() : an_error() { more error } };", Args)); EXPECT_TRUE(runToolOnCodeWithArgs( - new SkipBodyAction, "struct skipMe { skipMe(); };" - "skipMe::skipMe() : an_error([](){;}) { more error }", + llvm::make_unique<SkipBodyAction>(), + "struct skipMe { skipMe(); };" + "skipMe::skipMe() : an_error([](){;}) { more error }", Args)); EXPECT_TRUE(runToolOnCodeWithArgs( - new SkipBodyAction, "struct skipMe { skipMe(); };" - "skipMe::skipMe() : an_error{[](){;}} { more error }", + llvm::make_unique<SkipBodyAction>(), + "struct skipMe { skipMe(); };" + "skipMe::skipMe() : an_error{[](){;}} { more error }", Args)); EXPECT_TRUE(runToolOnCodeWithArgs( - new SkipBodyAction, + llvm::make_unique<SkipBodyAction>(), "struct skipMe { skipMe(); };" "skipMe::skipMe() : a<b<c>(e)>>(), f{}, g() { error }", Args)); EXPECT_TRUE(runToolOnCodeWithArgs( - new SkipBodyAction, "struct skipMe { skipMe() : bases()... { error } };", - Args)); + llvm::make_unique<SkipBodyAction>(), + "struct skipMe { skipMe() : bases()... { error } };", Args)); EXPECT_FALSE(runToolOnCodeWithArgs( - new SkipBodyAction, "struct skipMeNot { skipMeNot() : an_error() { } };", - Args)); - EXPECT_FALSE(runToolOnCodeWithArgs(new SkipBodyAction, + llvm::make_unique<SkipBodyAction>(), + "struct skipMeNot { skipMeNot() : an_error() { } };", Args)); + EXPECT_FALSE(runToolOnCodeWithArgs(llvm::make_unique<SkipBodyAction>(), "struct skipMeNot { skipMeNot(); };" "skipMeNot::skipMeNot() : an_error() { }", Args)); // Try/catch EXPECT_TRUE(runToolOnCode( - new SkipBodyAction, + llvm::make_unique<SkipBodyAction>(), "void skipMe() try { an_error() } catch(error) { error };")); EXPECT_TRUE(runToolOnCode( - new SkipBodyAction, + llvm::make_unique<SkipBodyAction>(), "struct S { void skipMe() try { an_error() } catch(error) { error } };")); EXPECT_TRUE( - runToolOnCode(new SkipBodyAction, + runToolOnCode(llvm::make_unique<SkipBodyAction>(), "void skipMe() try { an_error() } catch(error) { error; }" "catch(error) { error } catch (error) { }")); EXPECT_FALSE(runToolOnCode( - new SkipBodyAction, + llvm::make_unique<SkipBodyAction>(), "void skipMe() try something;")); // don't crash while parsing // Template - EXPECT_TRUE(runToolOnCode( - new SkipBodyAction, "template<typename T> int skipMe() { an_error_here }" - "int x = skipMe<int>();")); + EXPECT_TRUE( + runToolOnCode(llvm::make_unique<SkipBodyAction>(), + "template<typename T> int skipMe() { an_error_here }" + "int x = skipMe<int>();")); EXPECT_FALSE(runToolOnCodeWithArgs( - new SkipBodyAction, + llvm::make_unique<SkipBodyAction>(), "template<typename T> int skipMeNot() { an_error_here }", Args2)); } @@ -327,7 +330,8 @@ TEST(runToolOnCodeWithArgs, TestNoDepFil Args.push_back(DepFilePath.str()); Args.push_back("-MF"); Args.push_back(DepFilePath.str()); - EXPECT_TRUE(runToolOnCodeWithArgs(new SkipBodyAction, "", Args)); + EXPECT_TRUE( + runToolOnCodeWithArgs(llvm::make_unique<SkipBodyAction>(), "", Args)); EXPECT_FALSE(llvm::sys::fs::exists(DepFilePath.str())); EXPECT_FALSE(llvm::sys::fs::remove(DepFilePath.str())); } @@ -351,23 +355,26 @@ private: TEST(runToolOnCodeWithArgs, DiagnosticsColor) { - EXPECT_TRUE(runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(true), "", - {"-fcolor-diagnostics"})); - EXPECT_TRUE(runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(false), - "", {"-fno-color-diagnostics"})); - EXPECT_TRUE( - runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(true), "", - {"-fno-color-diagnostics", "-fcolor-diagnostics"})); - EXPECT_TRUE( - runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(false), "", - {"-fcolor-diagnostics", "-fno-color-diagnostics"})); EXPECT_TRUE(runToolOnCodeWithArgs( - new CheckColoredDiagnosticsAction(true), "", + llvm::make_unique<CheckColoredDiagnosticsAction>(true), "", + {"-fcolor-diagnostics"})); + EXPECT_TRUE(runToolOnCodeWithArgs( + llvm::make_unique<CheckColoredDiagnosticsAction>(false), "", + {"-fno-color-diagnostics"})); + EXPECT_TRUE(runToolOnCodeWithArgs( + llvm::make_unique<CheckColoredDiagnosticsAction>(true), "", + {"-fno-color-diagnostics", "-fcolor-diagnostics"})); + EXPECT_TRUE(runToolOnCodeWithArgs( + llvm::make_unique<CheckColoredDiagnosticsAction>(false), "", + {"-fcolor-diagnostics", "-fno-color-diagnostics"})); + EXPECT_TRUE(runToolOnCodeWithArgs( + llvm::make_unique<CheckColoredDiagnosticsAction>(true), "", {"-fno-color-diagnostics", "-fdiagnostics-color=always"})); // Check that this test would fail if ShowColors is not what it should. - EXPECT_FALSE(runToolOnCodeWithArgs(new CheckColoredDiagnosticsAction(false), - "", {"-fcolor-diagnostics"})); + EXPECT_FALSE(runToolOnCodeWithArgs( + llvm::make_unique<CheckColoredDiagnosticsAction>(false), "", + {"-fcolor-diagnostics"})); } TEST(ClangToolTest, ArgumentAdjusters) { @@ -603,7 +610,7 @@ TEST(runToolOnCode, TestResetDiagnostics // Should not crash EXPECT_FALSE( - runToolOnCode(new ResetDiagnosticAction, + runToolOnCode(llvm::make_unique<ResetDiagnosticAction>(), "struct Foo { Foo(int); ~Foo(); struct Fwd _fwd; };" "void func() { long x; Foo f(x); }")); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits