r207396 - Follow-up to r207071: Let newFrontendActionFactory() return a unique_ptr.

David Blaikie dblaikie at gmail.com
Mon Apr 28 10:28:04 PDT 2014


On Apr 27, 2014 10:06 PM, "Nico Weber" <nicolasweber at gmx.de> wrote:
>
> Author: nico
> Date: Sun Apr 27 23:57:14 2014
> New Revision: 207396
>
> URL: http://llvm.org/viewvc/llvm-project?rev=207396&view=rev
> Log:
> Follow-up to r207071: Let newFrontendActionFactory() return a unique_ptr.
>
> This exposed a leak, fix that.
>
> Modified:
>     cfe/trunk/include/clang/Tooling/Tooling.h
>     cfe/trunk/tools/clang-check/ClangCheck.cpp
>
> Modified: cfe/trunk/include/clang/Tooling/Tooling.h
> URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Tooling.h?rev=207396&r1=207395&r2=207396&view=diff
>
==============================================================================
> --- cfe/trunk/include/clang/Tooling/Tooling.h (original)
> +++ cfe/trunk/include/clang/Tooling/Tooling.h Sun Apr 27 23:57:14 2014
> @@ -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 *newFronten
>      SourceFileCallbacks *Callbacks;
>    };
>
> -  return new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks);
> +  return std::unique_ptr<FrontendActionFactory>(
> +      new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks));

Could you use make_unique here? (one reason it's not possible to use that
is when the ctor is private/friended, etc)

>  }
>
>  /// \brief Returns the absolute path of \c File, by prepending it with
>
> Modified: cfe/trunk/tools/clang-check/ClangCheck.cpp
> URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/ClangCheck.cpp?rev=207396&r1=207395&r2=207396&view=diff
>
==============================================================================
> --- cfe/trunk/tools/clang-check/ClangCheck.cpp (original)
> +++ cfe/trunk/tools/clang-check/ClangCheck.cpp Sun Apr 27 23:57:14 2014
> @@ -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());
>  }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140428/06e35515/attachment.html>


More information about the cfe-commits mailing list