diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-04-25 14:49:37 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-04-25 14:49:37 +0000 |
commit | 7225262c2ab37c7f678921948facf3bdecc3b256 (patch) | |
tree | d69c04773207412675c4a0d4834f7a2ac5a579e8 | |
parent | e73a9fd95fcf9071f8eaafd4d093a774151e673e (diff) | |
download | clang_35a-7225262c2ab37c7f678921948facf3bdecc3b256.tar.gz |
Improve ownership of ASTUnits in libTooling by using std::unique_ptr.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207229 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Tooling/Tooling.h | 3 | ||||
-rw-r--r-- | lib/Tooling/Tooling.cpp | 16 | ||||
-rw-r--r-- | unittests/Tooling/ToolingTest.cpp | 7 |
3 files changed, 12 insertions, 14 deletions
diff --git a/include/clang/Tooling/Tooling.h b/include/clang/Tooling/Tooling.h index 097a7a8a0b..46c988b7e7 100644 --- a/include/clang/Tooling/Tooling.h +++ b/include/clang/Tooling/Tooling.h @@ -39,6 +39,7 @@ #include "clang/Tooling/CompilationDatabase.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/Twine.h" +#include <memory> #include <string> #include <vector> @@ -282,7 +283,7 @@ class ClangTool { /// \brief Create an AST for each file specified in the command line and /// append them to ASTs. - int buildASTs(std::vector<ASTUnit *> &ASTs); + int buildASTs(std::vector<std::unique_ptr<ASTUnit>> &ASTs); /// \brief Returns the file manager used in the tool. /// diff --git a/lib/Tooling/Tooling.cpp b/lib/Tooling/Tooling.cpp index 25ade338e1..9bd85ee357 100644 --- a/lib/Tooling/Tooling.cpp +++ b/lib/Tooling/Tooling.cpp @@ -371,29 +371,29 @@ int ClangTool::run(ToolAction *Action) { namespace { class ASTBuilderAction : public ToolAction { - std::vector<ASTUnit *> &ASTs; + std::vector<std::unique_ptr<ASTUnit>> &ASTs; public: - ASTBuilderAction(std::vector<ASTUnit *> &ASTs) : ASTs(ASTs) {} + ASTBuilderAction(std::vector<std::unique_ptr<ASTUnit>> &ASTs) : ASTs(ASTs) {} bool runInvocation(CompilerInvocation *Invocation, FileManager *Files, DiagnosticConsumer *DiagConsumer) override { // FIXME: This should use the provided FileManager. - ASTUnit *AST = ASTUnit::LoadFromCompilerInvocation( + std::unique_ptr<ASTUnit> AST(ASTUnit::LoadFromCompilerInvocation( Invocation, CompilerInstance::createDiagnostics( &Invocation->getDiagnosticOpts(), DiagConsumer, - /*ShouldOwnClient=*/false)); + /*ShouldOwnClient=*/false))); if (!AST) return false; - ASTs.push_back(AST); + ASTs.push_back(std::move(AST)); return true; } }; } -int ClangTool::buildASTs(std::vector<ASTUnit *> &ASTs) { +int ClangTool::buildASTs(std::vector<std::unique_ptr<ASTUnit>> &ASTs) { ASTBuilderAction Action(ASTs); return run(&Action); } @@ -408,7 +408,7 @@ ASTUnit *buildASTFromCodeWithArgs(const Twine &Code, SmallString<16> FileNameStorage; StringRef FileNameRef = FileName.toNullTerminatedStringRef(FileNameStorage); - std::vector<ASTUnit *> ASTs; + std::vector<std::unique_ptr<ASTUnit>> ASTs; ASTBuilderAction Action(ASTs); ToolInvocation Invocation(getSyntaxOnlyToolArgs(Args, FileNameRef), &Action, 0); @@ -419,7 +419,7 @@ ASTUnit *buildASTFromCodeWithArgs(const Twine &Code, return 0; assert(ASTs.size() == 1); - return ASTs[0]; + return ASTs[0].release(); } } // end namespace tooling diff --git a/unittests/Tooling/ToolingTest.cpp b/unittests/Tooling/ToolingTest.cpp index 641e99634e..606eda15df 100644 --- a/unittests/Tooling/ToolingTest.cpp +++ b/unittests/Tooling/ToolingTest.cpp @@ -310,11 +310,9 @@ TEST(ClangToolTest, BuildASTs) { Tool.mapVirtualFile("/a.cc", "void a() {}"); Tool.mapVirtualFile("/b.cc", "void b() {}"); - std::vector<ASTUnit *> ASTs; + std::vector<std::unique_ptr<ASTUnit>> ASTs; EXPECT_EQ(0, Tool.buildASTs(ASTs)); EXPECT_EQ(2u, ASTs.size()); - - llvm::DeleteContainerPointers(ASTs); } struct TestDiagnosticConsumer : public DiagnosticConsumer { @@ -344,11 +342,10 @@ TEST(ClangToolTest, InjectDiagnosticConsumerInBuildASTs) { Tool.mapVirtualFile("/a.cc", "int x = undeclared;"); TestDiagnosticConsumer Consumer; Tool.setDiagnosticConsumer(&Consumer); - std::vector<ASTUnit*> ASTs; + std::vector<std::unique_ptr<ASTUnit>> ASTs; Tool.buildASTs(ASTs); EXPECT_EQ(1u, ASTs.size()); EXPECT_EQ(1u, Consumer.NumDiagnosticsSeen); - llvm::DeleteContainerPointers(ASTs); } #endif |