diff options
author | Nico Weber <nicolasweber@gmx.de> | 2014-04-28 04:57:14 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2014-04-28 04:57:14 +0000 |
commit | 10bf95d61b7d545b14f79c28f9790ab47b9eaf41 (patch) | |
tree | 8808484c522475049b660bc9f11da157754e7c18 | |
parent | a41d48cac8d29187a5b1421646ed1250e57be434 (diff) | |
download | bcm5719-llvm-10bf95d61b7d545b14f79c28f9790ab47b9eaf41.tar.gz bcm5719-llvm-10bf95d61b7d545b14f79c28f9790ab47b9eaf41.zip |
Follow-up to r207071: Let newFrontendActionFactory() return a unique_ptr.
This exposed a leak, fix that.
llvm-svn: 207396
-rw-r--r-- | clang/include/clang/Tooling/Tooling.h | 18 | ||||
-rw-r--r-- | clang/tools/clang-check/ClangCheck.cpp | 4 |
2 files changed, 12 insertions, 10 deletions
diff --git a/clang/include/clang/Tooling/Tooling.h b/clang/include/clang/Tooling/Tooling.h index ece38fc7e74..a0d6cb789cf 100644 --- a/clang/include/clang/Tooling/Tooling.h +++ b/clang/include/clang/Tooling/Tooling.h @@ -97,7 +97,7 @@ public: /// FrontendActionFactory *Factory = /// newFrontendActionFactory<clang::SyntaxOnlyAction>(); template <typename T> -FrontendActionFactory *newFrontendActionFactory(); +std::unique_ptr<FrontendActionFactory> newFrontendActionFactory(); /// \brief Callbacks called before and after each source file processed by a /// FrontendAction created by the FrontedActionFactory returned by \c @@ -126,10 +126,10 @@ public: /// struct ProvidesASTConsumers { /// clang::ASTConsumer *newASTConsumer(); /// } Factory; -/// FrontendActionFactory *FactoryAdapter = -/// newFrontendActionFactory(&Factory); +/// std::unique_ptr<FrontendActionFactory> FactoryAdapter( +/// newFrontendActionFactory(&Factory)); template <typename FactoryT> -inline FrontendActionFactory *newFrontendActionFactory( +inline std::unique_ptr<FrontendActionFactory> newFrontendActionFactory( FactoryT *ConsumerFactory, SourceFileCallbacks *Callbacks = NULL); /// \brief Runs (and deletes) the tool on 'Code' with the -fsyntax-only flag. @@ -305,17 +305,18 @@ class ClangTool { }; template <typename T> -FrontendActionFactory *newFrontendActionFactory() { +std::unique_ptr<FrontendActionFactory> newFrontendActionFactory() { class SimpleFrontendActionFactory : public FrontendActionFactory { public: clang::FrontendAction *create() override { return new T; } }; - return new SimpleFrontendActionFactory; + return std::unique_ptr<FrontendActionFactory>( + new SimpleFrontendActionFactory); } template <typename FactoryT> -inline FrontendActionFactory *newFrontendActionFactory( +inline std::unique_ptr<FrontendActionFactory> newFrontendActionFactory( FactoryT *ConsumerFactory, SourceFileCallbacks *Callbacks) { class FrontendActionFactoryAdapter : public FrontendActionFactory { public: @@ -362,7 +363,8 @@ inline FrontendActionFactory *newFrontendActionFactory( SourceFileCallbacks *Callbacks; }; - return new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks); + return std::unique_ptr<FrontendActionFactory>( + new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks)); } /// \brief Returns the absolute path of \c File, by prepending it with diff --git a/clang/tools/clang-check/ClangCheck.cpp b/clang/tools/clang-check/ClangCheck.cpp index 4fc970c0d12..cc8d43cec22 100644 --- a/clang/tools/clang-check/ClangCheck.cpp +++ b/clang/tools/clang-check/ClangCheck.cpp @@ -215,7 +215,7 @@ int main(int argc, const char **argv) { Analyze ? "--analyze" : "-fsyntax-only", InsertAdjuster::BEGIN)); clang_check::ClangCheckActionFactory CheckFactory; - FrontendActionFactory *FrontendFactory; + std::unique_ptr<FrontendActionFactory> FrontendFactory; // Choose the correct factory based on the selected mode. if (Analyze) @@ -225,5 +225,5 @@ int main(int argc, const char **argv) { else FrontendFactory = newFrontendActionFactory(&CheckFactory); - return Tool.run(FrontendFactory); + return Tool.run(FrontendFactory.get()); } |