r213307 - unique_ptr-ify ownership of ASTConsumers

Alp Toker alp at nuanti.com
Thu Jul 17 14:45:00 PDT 2014


On 18/07/2014 00:22, David Blaikie wrote:
> On Thu, Jul 17, 2014 at 2:06 PM, Alp Toker <alp at nuanti.com> wrote:
>> On 17/07/2014 23:40, David Blaikie wrote:
>>> Author: dblaikie
>>> Date: Thu Jul 17 15:40:36 2014
>>> New Revision: 213307
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=213307&view=rev
>>> Log:
>>> unique_ptr-ify ownership of ASTConsumers
>>>
>>> (after fixing a bug in MultiplexConsumer I noticed the ownership of the
>>> nested consumers was implemented with raw pointers - so this fixes
>>> that... and follows the source back to its origin pushing unique_ptr
>>> ownership up through there too)
>>
>> David,
>>
>> Please back out this change and propose it on the list.
>>
>> I said just a couple of days ago that this probably isn't the way we want to
>> go so I don't understand why you went ahead and made this commit.
> As I mentioned in that thread this is consistent with the general
> direction of the LLVM project overall (and Clang specifically).

I disagreed with that assertion when you made it the other day. If you 
want to continue the discussion it's OK but this commit hasn't been 
approved, certainly isn't an obvious direction, and needs to be posted 
to the list for review.

(You asked me to revert a commit the other week and I did so out of 
courtesy, so I think you can do the same here regardless of whether you 
personally agree. The change is large and needs to be discussed.)



> Changes like this have been happening (by myself and others) since we
> switched to C++11 at the start of this year. Some of the earliest was
> simple transformation from OwningPtr to std::unique_ptr, but there's a
> lot more that's now possible with move semantics that couldn't be
> represented with a pre-move OwningPtr, so we'll see this sort of
> cleanup/improvement continue over time as people have time to do it.
>
> - David
>
>>> Modified:
>>>       cfe/trunk/examples/PrintFunctionNames/PrintFunctionNames.cpp
>>>       cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h
>>>       cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h
>>>       cfe/trunk/include/clang/CodeGen/CodeGenAction.h
>>>       cfe/trunk/include/clang/Frontend/ASTConsumers.h
>>>       cfe/trunk/include/clang/Frontend/CompilerInstance.h
>>>       cfe/trunk/include/clang/Frontend/FrontendAction.h
>>>       cfe/trunk/include/clang/Frontend/FrontendActions.h
>>>       cfe/trunk/include/clang/Frontend/MultiplexConsumer.h
>>>       cfe/trunk/include/clang/Rewrite/Frontend/ASTConsumers.h
>>>       cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h
>>>       cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h
>>>       cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
>>>       cfe/trunk/include/clang/Tooling/Tooling.h
>>>       cfe/trunk/lib/ARCMigrate/ARCMT.cpp
>>>       cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
>>>       cfe/trunk/lib/ASTMatchers/ASTMatchFinder.cpp
>>>       cfe/trunk/lib/CodeGen/CodeGenAction.cpp
>>>       cfe/trunk/lib/Frontend/ASTConsumers.cpp
>>>       cfe/trunk/lib/Frontend/ASTMerge.cpp
>>>       cfe/trunk/lib/Frontend/ASTUnit.cpp
>>>       cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp
>>>       cfe/trunk/lib/Frontend/CompilerInstance.cpp
>>>       cfe/trunk/lib/Frontend/FrontendAction.cpp
>>>       cfe/trunk/lib/Frontend/FrontendActions.cpp
>>>       cfe/trunk/lib/Frontend/MultiplexConsumer.cpp
>>>       cfe/trunk/lib/Frontend/Rewrite/FrontendActions.cpp
>>>       cfe/trunk/lib/Frontend/Rewrite/HTMLPrint.cpp
>>>       cfe/trunk/lib/Frontend/Rewrite/RewriteModernObjC.cpp
>>>       cfe/trunk/lib/Frontend/Rewrite/RewriteObjC.cpp
>>>       cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
>>>       cfe/trunk/lib/StaticAnalyzer/Frontend/FrontendActions.cpp
>>>       cfe/trunk/tools/clang-check/ClangCheck.cpp
>>>       cfe/trunk/tools/libclang/Indexing.cpp
>>>       cfe/trunk/unittests/AST/EvaluateAsRValueTest.cpp
>>>       cfe/trunk/unittests/AST/ExternalASTSourceTest.cpp
>>>       cfe/trunk/unittests/AST/NamedDeclPrinterTest.cpp
>>>       cfe/trunk/unittests/Frontend/FrontendActionTest.cpp
>>>       cfe/trunk/unittests/Sema/ExternalSemaSourceTest.cpp
>>>       cfe/trunk/unittests/Tooling/RefactoringTest.cpp
>>>       cfe/trunk/unittests/Tooling/TestVisitor.h
>>>       cfe/trunk/unittests/Tooling/ToolingTest.cpp
>>>
>>> Modified: cfe/trunk/examples/PrintFunctionNames/PrintFunctionNames.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/examples/PrintFunctionNames/PrintFunctionNames.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/examples/PrintFunctionNames/PrintFunctionNames.cpp
>>> (original)
>>> +++ cfe/trunk/examples/PrintFunctionNames/PrintFunctionNames.cpp Thu Jul
>>> 17 15:40:36 2014
>>> @@ -36,8 +36,9 @@ public:
>>>      class PrintFunctionNamesAction : public PluginASTAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI, llvm::StringRef) {
>>> -    return new PrintFunctionsConsumer();
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 llvm::StringRef) {
>>> +    return llvm::make_unique<PrintFunctionsConsumer>();
>>>      }
>>>        bool ParseArgs(const CompilerInstance &CI,
>>>
>>> Modified: cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h (original)
>>> +++ cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h Thu Jul 17 15:40:36
>>> 2014
>>> @@ -37,8 +37,8 @@ class MigrateSourceAction : public ASTFr
>>>      FileRemapper Remapper;
>>>    protected:
>>>      bool BeginInvocation(CompilerInstance &CI) override;
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      class MigrateAction : public WrapperFrontendAction {
>>> @@ -65,8 +65,8 @@ public:
>>>                        unsigned migrateAction);
>>>      protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>      bool BeginInvocation(CompilerInstance &CI) override;
>>>    };
>>>
>>> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h (original)
>>> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchFinder.h Thu Jul 17
>>> 15:40:36 2014
>>> @@ -148,7 +148,7 @@ public:
>>>                             MatchCallback *Action);
>>>        /// \brief Creates a clang ASTConsumer that finds all matches.
>>> -  clang::ASTConsumer *newASTConsumer();
>>> +  std::unique_ptr<clang::ASTConsumer> newASTConsumer();
>>>        /// \brief Calls the registered callbacks on all matches on the
>>> given \p Node.
>>>      ///
>>>
>>> Modified: cfe/trunk/include/clang/CodeGen/CodeGenAction.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/CodeGenAction.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/CodeGen/CodeGenAction.h (original)
>>> +++ cfe/trunk/include/clang/CodeGen/CodeGenAction.h Thu Jul 17 15:40:36
>>> 2014
>>> @@ -37,8 +37,8 @@ protected:
>>>        bool hasIRSupport() const override;
>>>    -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>        void ExecuteAction() override;
>>>
>>> Modified: cfe/trunk/include/clang/Frontend/ASTConsumers.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ASTConsumers.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Frontend/ASTConsumers.h (original)
>>> +++ cfe/trunk/include/clang/Frontend/ASTConsumers.h Thu Jul 17 15:40:36
>>> 2014
>>> @@ -16,6 +16,8 @@
>>>      #include "clang/Basic/LLVM.h"
>>>    +#include <memory>
>>> +
>>>    namespace clang {
>>>      class ASTConsumer;
>>> @@ -30,24 +32,26 @@ class TargetOptions;
>>>    // original C code.  The output is intended to be in a format such that
>>>    // clang could re-parse the output back into the same AST, but the
>>>    // implementation is still incomplete.
>>> -ASTConsumer *CreateASTPrinter(raw_ostream *OS, StringRef FilterString);
>>> +std::unique_ptr<ASTConsumer> CreateASTPrinter(raw_ostream *OS,
>>> +                                              StringRef FilterString);
>>>      // AST dumper: dumps the raw AST in human-readable form to stderr;
>>> this is
>>>    // intended for debugging.
>>> -ASTConsumer *CreateASTDumper(StringRef FilterString, bool DumpLookups =
>>> false);
>>> +std::unique_ptr<ASTConsumer> CreateASTDumper(StringRef FilterString,
>>> +                                             bool DumpLookups = false);
>>>      // AST Decl node lister: prints qualified names of all filterable AST
>>> Decl
>>>    // nodes.
>>> -ASTConsumer *CreateASTDeclNodeLister();
>>> +std::unique_ptr<ASTConsumer> CreateASTDeclNodeLister();
>>>      // Graphical AST viewer: for each function definition, creates a graph
>>> of
>>>    // the AST and displays it with the graph viewer "dotty".  Also outputs
>>>    // function declarations to stderr.
>>> -ASTConsumer *CreateASTViewer();
>>> +std::unique_ptr<ASTConsumer> CreateASTViewer();
>>>      // DeclContext printer: prints out the DeclContext tree in
>>> human-readable form
>>>    // to stderr; this is intended for debugging.
>>> -ASTConsumer *CreateDeclContextPrinter();
>>> +std::unique_ptr<ASTConsumer> CreateDeclContextPrinter();
>>>      } // end clang namespace
>>>
>>> Modified: cfe/trunk/include/clang/Frontend/CompilerInstance.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInstance.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Frontend/CompilerInstance.h (original)
>>> +++ cfe/trunk/include/clang/Frontend/CompilerInstance.h Thu Jul 17
>>> 15:40:36 2014
>>> @@ -14,6 +14,7 @@
>>>    #include "clang/Basic/SourceManager.h"
>>>    #include "clang/Frontend/CompilerInvocation.h"
>>>    #include "clang/Frontend/Utils.h"
>>> +#include "clang/AST/ASTConsumer.h"
>>>    #include "clang/Lex/ModuleLoader.h"
>>>    #include "llvm/ADT/ArrayRef.h"
>>>    #include "llvm/ADT/DenseMap.h"
>>> @@ -443,11 +444,11 @@ public:
>>>        /// takeASTConsumer - Remove the current AST consumer and give
>>> ownership to
>>>      /// the caller.
>>> -  ASTConsumer *takeASTConsumer() { return Consumer.release(); }
>>> +  std::unique_ptr<ASTConsumer> takeASTConsumer() { return
>>> std::move(Consumer); }
>>>        /// setASTConsumer - Replace the current AST consumer; the compiler
>>> instance
>>>      /// takes ownership of \p Value.
>>> -  void setASTConsumer(ASTConsumer *Value);
>>> +  void setASTConsumer(std::unique_ptr<ASTConsumer> Value);
>>>        /// }
>>>      /// @name Semantic analysis
>>>
>>> Modified: cfe/trunk/include/clang/Frontend/FrontendAction.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendAction.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Frontend/FrontendAction.h (original)
>>> +++ cfe/trunk/include/clang/Frontend/FrontendAction.h Thu Jul 17 15:40:36
>>> 2014
>>> @@ -41,8 +41,8 @@ class FrontendAction {
>>>      friend class WrapperFrontendAction;
>>>      private:
>>> -  ASTConsumer* CreateWrappedASTConsumer(CompilerInstance &CI,
>>> -                                        StringRef InFile);
>>> +  std::unique_ptr<ASTConsumer> CreateWrappedASTConsumer(CompilerInstance
>>> &CI,
>>> +                                                        StringRef
>>> InFile);
>>>      protected:
>>>      /// @name Implementation Action Interface
>>> @@ -61,8 +61,8 @@ protected:
>>>      /// getCurrentFile().
>>>      ///
>>>      /// \return The new AST consumer, or null on failure.
>>> -  virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                         StringRef InFile) = 0;
>>> +  virtual std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance
>>> &CI,
>>> +                                                         StringRef
>>> InFile) = 0;
>>>        /// \brief Callback before starting processing a single input,
>>> giving the
>>>      /// opportunity to modify the CompilerInvocation or do some other
>>> action
>>> @@ -227,11 +227,10 @@ public:
>>>      class PluginASTAction : public ASTFrontendAction {
>>>      virtual void anchor();
>>> -protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override = 0;
>>> -
>>>    public:
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override = 0;
>>> +
>>>      /// \brief Parse the given plugin command line arguments.
>>>      ///
>>>      /// \param CI - The compiler instance, for use in reporting
>>> diagnostics.
>>> @@ -247,8 +246,8 @@ class PreprocessorFrontendAction : publi
>>>    protected:
>>>      /// \brief Provide a default implementation which returns aborts;
>>>      /// this method should never be called by FrontendAction clients.
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>      public:
>>>      bool usesPreprocessorOnly() const override { return true; }
>>> @@ -264,8 +263,8 @@ class WrapperFrontendAction : public Fro
>>>      std::unique_ptr<FrontendAction> WrappedAction;
>>>      protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>      bool BeginInvocation(CompilerInstance &CI) override;
>>>      bool BeginSourceFileAction(CompilerInstance &CI, StringRef Filename)
>>> override;
>>>      void ExecuteAction() override;
>>>
>>> Modified: cfe/trunk/include/clang/Frontend/FrontendActions.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendActions.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Frontend/FrontendActions.h (original)
>>> +++ cfe/trunk/include/clang/Frontend/FrontendActions.h Thu Jul 17 15:40:36
>>> 2014
>>> @@ -26,8 +26,8 @@ class FileEntry;
>>>    class InitOnlyAction : public FrontendAction {
>>>      void ExecuteAction() override;
>>>    -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>      public:
>>>      // Don't claim to only use the preprocessor, we want to follow the AST
>>> path,
>>> @@ -41,38 +41,38 @@ public:
>>>      class ASTPrintAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      class ASTDumpAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      class ASTDeclListAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      class ASTViewAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      class DeclContextPrintAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      class GeneratePCHAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>        TranslationUnitKind getTranslationUnitKind() override {
>>>        return TU_Prefix;
>>> @@ -98,8 +98,8 @@ class GenerateModuleAction : public ASTF
>>>      bool IsSystem;
>>>        protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>        TranslationUnitKind getTranslationUnitKind() override {
>>>        return TU_Module;
>>> @@ -128,8 +128,8 @@ public:
>>>      class SyntaxOnlyAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                         StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>      public:
>>>      bool hasCodeCompletionSupport() const override { return true; }
>>> @@ -139,8 +139,8 @@ public:
>>>    /// basic debugging and discovery.
>>>    class DumpModuleInfoAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>      void ExecuteAction() override;
>>>      public:
>>> @@ -152,8 +152,8 @@ public:
>>>      class VerifyPCHAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>        void ExecuteAction() override;
>>>    @@ -177,8 +177,8 @@ class ASTMergeAction : public FrontendAc
>>>      std::vector<std::string> ASTFiles;
>>>      protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>        bool BeginSourceFileAction(CompilerInstance &CI,
>>>                                 StringRef Filename) override;
>>> @@ -200,7 +200,8 @@ public:
>>>    class PrintPreambleAction : public FrontendAction {
>>>    protected:
>>>      void ExecuteAction() override;
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &, StringRef) override
>>> {
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &,
>>> +                                                 StringRef) override {
>>>        return nullptr;
>>>      }
>>>
>>> Modified: cfe/trunk/include/clang/Frontend/MultiplexConsumer.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/MultiplexConsumer.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Frontend/MultiplexConsumer.h (original)
>>> +++ cfe/trunk/include/clang/Frontend/MultiplexConsumer.h Thu Jul 17
>>> 15:40:36 2014
>>> @@ -29,7 +29,7 @@ class MultiplexASTDeserializationListene
>>>    class MultiplexConsumer : public SemaConsumer {
>>>    public:
>>>      // Takes ownership of the pointers in C.
>>> -  MultiplexConsumer(ArrayRef<ASTConsumer*> C);
>>> +  MultiplexConsumer(std::vector<std::unique_ptr<ASTConsumer>> C);
>>>      ~MultiplexConsumer();
>>>        // ASTConsumer
>>> @@ -59,7 +59,7 @@ public:
>>>      void ForgetSema() override;
>>>      private:
>>> -  std::vector<ASTConsumer*> Consumers;  // Owns these.
>>> +  std::vector<std::unique_ptr<ASTConsumer>> Consumers; // Owns these.
>>>      std::unique_ptr<MultiplexASTMutationListener> MutationListener;
>>>      std::unique_ptr<MultiplexASTDeserializationListener>
>>> DeserializationListener;
>>>    };
>>>
>>> Modified: cfe/trunk/include/clang/Rewrite/Frontend/ASTConsumers.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Rewrite/Frontend/ASTConsumers.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Rewrite/Frontend/ASTConsumers.h (original)
>>> +++ cfe/trunk/include/clang/Rewrite/Frontend/ASTConsumers.h Thu Jul 17
>>> 15:40:36 2014
>>> @@ -15,6 +15,8 @@
>>>    #define REWRITE_ASTCONSUMERS_H
>>>      #include "clang/Basic/LLVM.h"
>>> +
>>> +#include <memory>
>>>    #include <string>
>>>      namespace clang {
>>> @@ -26,23 +28,21 @@ class Preprocessor;
>>>      // ObjC rewriter: attempts to rewrite ObjC constructs into pure C
>>> code.
>>>    // This is considered experimental, and only works with Apple's ObjC
>>> runtime.
>>> -ASTConsumer *CreateObjCRewriter(const std::string &InFile,
>>> -                                raw_ostream *OS,
>>> -                                DiagnosticsEngine &Diags,
>>> -                                const LangOptions &LOpts,
>>> -                                bool SilenceRewriteMacroWarning);
>>> -ASTConsumer *CreateModernObjCRewriter(const std::string &InFile,
>>> -                                raw_ostream *OS,
>>> -                                DiagnosticsEngine &Diags,
>>> -                                const LangOptions &LOpts,
>>> -                                bool SilenceRewriteMacroWarning,
>>> -                                bool LineInfo);
>>> +std::unique_ptr<ASTConsumer>
>>> +CreateObjCRewriter(const std::string &InFile, raw_ostream *OS,
>>> +                   DiagnosticsEngine &Diags, const LangOptions &LOpts,
>>> +                   bool SilenceRewriteMacroWarning);
>>> +std::unique_ptr<ASTConsumer>
>>> +CreateModernObjCRewriter(const std::string &InFile, raw_ostream *OS,
>>> +                         DiagnosticsEngine &Diags, const LangOptions
>>> &LOpts,
>>> +                         bool SilenceRewriteMacroWarning, bool LineInfo);
>>>      /// CreateHTMLPrinter - Create an AST consumer which rewrites source
>>> code to
>>>    /// HTML with syntax highlighting suitable for viewing in a web-browser.
>>> -ASTConsumer *CreateHTMLPrinter(raw_ostream *OS, Preprocessor &PP,
>>> -                               bool SyntaxHighlight = true,
>>> -                               bool HighlightMacros = true);
>>> +std::unique_ptr<ASTConsumer> CreateHTMLPrinter(raw_ostream *OS,
>>> +                                               Preprocessor &PP,
>>> +                                               bool SyntaxHighlight =
>>> true,
>>> +                                               bool HighlightMacros =
>>> true);
>>>      } // end clang namespace
>>>
>>> Modified: cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h (original)
>>> +++ cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h Thu Jul 17
>>> 15:40:36 2014
>>> @@ -22,8 +22,8 @@ class FixItOptions;
>>>      class HTMLPrintAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      class FixItAction : public ASTFrontendAction {
>>> @@ -31,8 +31,8 @@ protected:
>>>      std::unique_ptr<FixItRewriter> Rewriter;
>>>      std::unique_ptr<FixItOptions> FixItOpts;
>>>    -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>        bool BeginSourceFileAction(CompilerInstance &CI,
>>>                                 StringRef Filename) override;
>>> @@ -59,8 +59,8 @@ protected:
>>>      class RewriteObjCAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      class RewriteMacrosAction : public PreprocessorFrontendAction {
>>>
>>> Modified:
>>> cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h
>>> (original)
>>> +++ cfe/trunk/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h Thu
>>> Jul 17 15:40:36 2014
>>> @@ -37,10 +37,9 @@ public:
>>>    /// CreateAnalysisConsumer - Creates an ASTConsumer to run various code
>>>    /// analysis passes.  (The set of analyses run is controlled by
>>> command-line
>>>    /// options.)
>>> -AnalysisASTConsumer *CreateAnalysisConsumer(const Preprocessor &pp,
>>> -                                            const std::string &output,
>>> -                                            AnalyzerOptionsRef opts,
>>> -                                            ArrayRef<std::string>
>>> plugins);
>>> +std::unique_ptr<AnalysisASTConsumer>
>>> +CreateAnalysisConsumer(const Preprocessor &pp, const std::string &output,
>>> +                       AnalyzerOptionsRef opts, ArrayRef<std::string>
>>> plugins);
>>>      } // end GR namespace
>>>
>>> Modified:
>>> cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
>>> (original)
>>> +++ cfe/trunk/include/clang/StaticAnalyzer/Frontend/FrontendActions.h Thu
>>> Jul 17 15:40:36 2014
>>> @@ -22,8 +22,8 @@ namespace ento {
>>>      class AnalysisAction : public ASTFrontendAction {
>>>    protected:
>>> -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>    };
>>>      void printCheckerHelp(raw_ostream &OS, ArrayRef<std::string> plugins);
>>>
>>> Modified: cfe/trunk/include/clang/Tooling/Tooling.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Tooling.h?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Tooling/Tooling.h (original)
>>> +++ cfe/trunk/include/clang/Tooling/Tooling.h Thu Jul 17 15:40:36 2014
>>> @@ -30,6 +30,7 @@
>>>    #ifndef LLVM_CLANG_TOOLING_TOOLING_H
>>>    #define LLVM_CLANG_TOOLING_TOOLING_H
>>>    +#include "clang/AST/ASTConsumer.h"
>>>    #include "clang/Basic/Diagnostic.h"
>>>    #include "clang/Basic/FileManager.h"
>>>    #include "clang/Basic/LLVM.h"
>>> @@ -335,8 +336,8 @@ inline std::unique_ptr<FrontendActionFac
>>>                                 SourceFileCallbacks *Callbacks)
>>>            : ConsumerFactory(ConsumerFactory), Callbacks(Callbacks) {}
>>>    -      clang::ASTConsumer *CreateASTConsumer(clang::CompilerInstance &,
>>> -                                            StringRef) override {
>>> +      std::unique_ptr<clang::ASTConsumer>
>>> +      CreateASTConsumer(clang::CompilerInstance &, StringRef) override {
>>>            return ConsumerFactory->newASTConsumer();
>>>          }
>>>
>>> Modified: cfe/trunk/lib/ARCMigrate/ARCMT.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ARCMT.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/ARCMigrate/ARCMT.cpp (original)
>>> +++ cfe/trunk/lib/ARCMigrate/ARCMT.cpp Thu Jul 17 15:40:36 2014
>>> @@ -446,11 +446,11 @@ public:
>>>      ARCMTMacroTrackerAction(std::vector<SourceLocation> &ARCMTMacroLocs)
>>>        : ARCMTMacroLocs(ARCMTMacroLocs) { }
>>>    -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override {
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override {
>>>        CI.getPreprocessor().addPPCallbacks(
>>>                                  new
>>> ARCMTMacroTrackerPPCallbacks(ARCMTMacroLocs));
>>> -    return new ASTConsumer();
>>> +    return llvm::make_unique<ASTConsumer>();
>>>      }
>>>    };
>>>
>>> Modified: cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original)
>>> +++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Thu Jul 17 15:40:36 2014
>>> @@ -185,23 +185,17 @@ ObjCMigrateAction::ObjCMigrateAction(Fro
>>>        MigrateDir = "."; // user current directory if none is given.
>>>    }
>>>    -ASTConsumer *ObjCMigrateAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                                  StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +ObjCMigrateAction::CreateASTConsumer(CompilerInstance &CI, StringRef
>>> InFile) {
>>>      PPConditionalDirectiveRecord *
>>>        PPRec = new
>>> PPConditionalDirectiveRecord(CompInst->getSourceManager());
>>>      CompInst->getPreprocessor().addPPCallbacks(PPRec);
>>> -  ASTConsumer *
>>> -    WrappedConsumer = WrapperFrontendAction::CreateASTConsumer(CI,
>>> InFile);
>>> -  ASTConsumer *MTConsumer = new ObjCMigrateASTConsumer(MigrateDir,
>>> -                                                       ObjCMigAction,
>>> -                                                       Remapper,
>>> -
>>> CompInst->getFileManager(),
>>> -                                                       PPRec,
>>> -
>>> CompInst->getPreprocessor(),
>>> -                                                       false,
>>> -
>>> ArrayRef<std::string>());
>>> -  ASTConsumer *Consumers[] = { MTConsumer, WrappedConsumer };
>>> -  return new MultiplexConsumer(Consumers);
>>> +  std::vector<std::unique_ptr<ASTConsumer>> Consumers;
>>> +  Consumers.push_back(WrapperFrontendAction::CreateASTConsumer(CI,
>>> InFile));
>>> +  Consumers.push_back(llvm::make_unique<ObjCMigrateASTConsumer>(
>>> +      MigrateDir, ObjCMigAction, Remapper, CompInst->getFileManager(),
>>> PPRec,
>>> +      CompInst->getPreprocessor(), false, ArrayRef<std::string>()));
>>> +  return llvm::make_unique<MultiplexConsumer>(std::move(Consumers));
>>>    }
>>>      bool ObjCMigrateAction::BeginInvocation(CompilerInstance &CI) {
>>> @@ -1865,8 +1859,8 @@ static std::vector<std::string> getWhite
>>>      return Filenames;
>>>    }
>>>    -ASTConsumer *MigrateSourceAction::CreateASTConsumer(CompilerInstance
>>> &CI,
>>> -                                                  StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +MigrateSourceAction::CreateASTConsumer(CompilerInstance &CI, StringRef
>>> InFile) {
>>>      PPConditionalDirectiveRecord *
>>>        PPRec = new PPConditionalDirectiveRecord(CI.getSourceManager());
>>>      unsigned ObjCMTAction = CI.getFrontendOpts().ObjCMTAction;
>>> @@ -1883,14 +1877,10 @@ ASTConsumer *MigrateSourceAction::Create
>>>      CI.getPreprocessor().addPPCallbacks(PPRec);
>>>      std::vector<std::string> WhiteList =
>>>        getWhiteListFilenames(CI.getFrontendOpts().ObjCMTWhiteListPath);
>>> -  return new ObjCMigrateASTConsumer(CI.getFrontendOpts().OutputFile,
>>> -                                    ObjCMTAction,
>>> -                                    Remapper,
>>> -                                    CI.getFileManager(),
>>> -                                    PPRec,
>>> -                                    CI.getPreprocessor(),
>>> -                                    /*isOutputFile=*/true,
>>> -                                    WhiteList);
>>> +  return llvm::make_unique<ObjCMigrateASTConsumer>(
>>> +      CI.getFrontendOpts().OutputFile, ObjCMTAction, Remapper,
>>> +      CI.getFileManager(), PPRec, CI.getPreprocessor(),
>>> +      /*isOutputFile=*/true, WhiteList);
>>>    }
>>>      namespace {
>>>
>>> Modified: cfe/trunk/lib/ASTMatchers/ASTMatchFinder.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/ASTMatchFinder.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/ASTMatchers/ASTMatchFinder.cpp (original)
>>> +++ cfe/trunk/lib/ASTMatchers/ASTMatchFinder.cpp Thu Jul 17 15:40:36 2014
>>> @@ -823,8 +823,8 @@ bool MatchFinder::addDynamicMatcher(cons
>>>      return false;
>>>    }
>>>    -ASTConsumer *MatchFinder::newASTConsumer() {
>>> -  return new internal::MatchASTConsumer(this, ParsingDone);
>>> +std::unique_ptr<ASTConsumer> MatchFinder::newASTConsumer() {
>>> +  return llvm::make_unique<internal::MatchASTConsumer>(this,
>>> ParsingDone);
>>>    }
>>>      void MatchFinder::match(const clang::ast_type_traits::DynTypedNode
>>> &Node,
>>>
>>> Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original)
>>> +++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Thu Jul 17 15:40:36 2014
>>> @@ -590,8 +590,8 @@ static raw_ostream *GetOutputStream(Comp
>>>      llvm_unreachable("Invalid action!");
>>>    }
>>>    -ASTConsumer *CodeGenAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                              StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile)
>>> {
>>>      BackendAction BA = static_cast<BackendAction>(Act);
>>>      std::unique_ptr<raw_ostream> OS(GetOutputStream(CI, InFile, BA));
>>>      if (BA != Backend_EmitNothing && !OS)
>>> @@ -623,11 +623,12 @@ ASTConsumer *CodeGenAction::CreateASTCon
>>>        LinkModuleToUse = ModuleOrErr.get();
>>>      }
>>>    -  BEConsumer = new BackendConsumer(BA, CI.getDiagnostics(),
>>> CI.getCodeGenOpts(),
>>> -                                   CI.getTargetOpts(), CI.getLangOpts(),
>>> -                                   CI.getFrontendOpts().ShowTimers,
>>> InFile,
>>> -                                   LinkModuleToUse, OS.release(),
>>> *VMContext);
>>> -  return BEConsumer;
>>> +  auto Result = llvm::make_unique<BackendConsumer>(
>>> +      BA, CI.getDiagnostics(), CI.getCodeGenOpts(), CI.getTargetOpts(),
>>> +      CI.getLangOpts(), (bool)CI.getFrontendOpts().ShowTimers, InFile,
>>> +      LinkModuleToUse, OS.release(), *VMContext);
>>> +  BEConsumer = Result.get();
>>> +  return std::move(Result);
>>>    }
>>>      void CodeGenAction::ExecuteAction() {
>>>
>>> Modified: cfe/trunk/lib/Frontend/ASTConsumers.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTConsumers.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/ASTConsumers.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/ASTConsumers.cpp Thu Jul 17 15:40:36 2014
>>> @@ -118,17 +118,19 @@ namespace {
>>>      };
>>>    } // end anonymous namespace
>>>    -ASTConsumer *clang::CreateASTPrinter(raw_ostream *Out,
>>> -                                     StringRef FilterString) {
>>> -  return new ASTPrinter(Out, /*Dump=*/ false, FilterString);
>>> +std::unique_ptr<ASTConsumer> clang::CreateASTPrinter(raw_ostream *Out,
>>> +                                                     StringRef
>>> FilterString) {
>>> +  return llvm::make_unique<ASTPrinter>(Out, /*Dump=*/false,
>>> FilterString);
>>>    }
>>>    -ASTConsumer *clang::CreateASTDumper(StringRef FilterString, bool
>>> DumpLookups) {
>>> -  return new ASTPrinter(nullptr, /*Dump=*/true, FilterString,
>>> DumpLookups);
>>> +std::unique_ptr<ASTConsumer> clang::CreateASTDumper(StringRef
>>> FilterString,
>>> +                                                    bool DumpLookups) {
>>> +  return llvm::make_unique<ASTPrinter>(nullptr, /*Dump=*/true,
>>> FilterString,
>>> +                                       DumpLookups);
>>>    }
>>>    -ASTConsumer *clang::CreateASTDeclNodeLister() {
>>> -  return new ASTDeclNodeLister(nullptr);
>>> +std::unique_ptr<ASTConsumer> clang::CreateASTDeclNodeLister() {
>>> +  return llvm::make_unique<ASTDeclNodeLister>(nullptr);
>>>    }
>>>
>>> //===----------------------------------------------------------------------===//
>>> @@ -164,8 +166,9 @@ void ASTViewer::HandleTopLevelSingleDecl
>>>      }
>>>    }
>>>    -
>>> -ASTConsumer *clang::CreateASTViewer() { return new ASTViewer(); }
>>> +std::unique_ptr<ASTConsumer> clang::CreateASTViewer() {
>>> +  return llvm::make_unique<ASTViewer>();
>>> +}
>>>
>>> //===----------------------------------------------------------------------===//
>>>    /// DeclContextPrinter - Decl and DeclContext Visualization
>>> @@ -475,6 +478,6 @@ void DeclContextPrinter::PrintDeclContex
>>>        }
>>>      }
>>>    }
>>> -ASTConsumer *clang::CreateDeclContextPrinter() {
>>> -  return new DeclContextPrinter();
>>> +std::unique_ptr<ASTConsumer> clang::CreateDeclContextPrinter() {
>>> +  return llvm::make_unique<DeclContextPrinter>();
>>>    }
>>>
>>> Modified: cfe/trunk/lib/Frontend/ASTMerge.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTMerge.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/ASTMerge.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/ASTMerge.cpp Thu Jul 17 15:40:36 2014
>>> @@ -16,8 +16,8 @@
>>>      using namespace clang;
>>>    -ASTConsumer *ASTMergeAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                               StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +ASTMergeAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile)
>>> {
>>>      return AdaptedAction->CreateASTConsumer(CI, InFile);
>>>    }
>>>
>>> Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Thu Jul 17 15:40:36 2014
>>> @@ -891,12 +891,12 @@ class TopLevelDeclTrackerAction : public
>>>    public:
>>>      ASTUnit &Unit;
>>>    -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override {
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override {
>>>        CI.getPreprocessor().addPPCallbacks(
>>>         new
>>> MacroDefinitionTrackerPPCallbacks(Unit.getCurrentTopLevelHashValue()));
>>> -    return new TopLevelDeclTrackerConsumer(Unit,
>>> -
>>> Unit.getCurrentTopLevelHashValue());
>>> +    return llvm::make_unique<TopLevelDeclTrackerConsumer>(
>>> +        Unit, Unit.getCurrentTopLevelHashValue());
>>>      }
>>>      public:
>>> @@ -916,8 +916,8 @@ public:
>>>      explicit PrecompilePreambleAction(ASTUnit &Unit)
>>>          : Unit(Unit), HasEmittedPreamblePCH(false) {}
>>>    -  ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
>>> -                                 StringRef InFile) override;
>>> +  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
>>> +                                                 StringRef InFile)
>>> override;
>>>      bool hasEmittedPreamblePCH() const { return HasEmittedPreamblePCH; }
>>>      void setHasEmittedPreamblePCH() { HasEmittedPreamblePCH = true; }
>>>      bool shouldEraseOutputFiles() override { return
>>> !hasEmittedPreamblePCH(); }
>>> @@ -979,8 +979,9 @@ public:
>>>      }
>>>    -ASTConsumer
>>> *PrecompilePreambleAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                                         StringRef
>>> InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +PrecompilePreambleAction::CreateASTConsumer(CompilerInstance &CI,
>>> +                                            StringRef InFile) {
>>>      std::string Sysroot;
>>>      std::string OutputFile;
>>>      raw_ostream *OS = nullptr;
>>> @@ -993,8 +994,8 @@ ASTConsumer *PrecompilePreambleAction::C
>>>        CI.getPreprocessor().addPPCallbacks(new
>>> MacroDefinitionTrackerPPCallbacks(
>>>          Unit.getCurrentTopLevelHashValue()));
>>> -  return new PrecompilePreambleConsumer(Unit, this, CI.getPreprocessor(),
>>> -                                        Sysroot, OS);
>>> +  return llvm::make_unique<PrecompilePreambleConsumer>(
>>> +      Unit, this, CI.getPreprocessor(), Sysroot, OS);
>>>    }
>>>      static bool isNonDriverDiag(const StoredDiagnostic &StoredDiag) {
>>> @@ -1689,7 +1690,7 @@ void ASTUnit::transferASTDataFromCompile
>>>      assert(CI.hasInvocation() && "missing invocation");
>>>      LangOpts = CI.getInvocation().LangOpts;
>>>      TheSema.reset(CI.takeSema());
>>> -  Consumer.reset(CI.takeASTConsumer());
>>> +  Consumer = CI.takeASTConsumer();
>>>      if (CI.hasASTContext())
>>>        Ctx = &CI.getASTContext();
>>>      if (CI.hasPreprocessor())
>>> @@ -1863,12 +1864,13 @@ ASTUnit *ASTUnit::LoadFromCompilerInvoca
>>>      if (Persistent && !TrackerAct) {
>>>        Clang->getPreprocessor().addPPCallbacks(
>>>         new
>>> MacroDefinitionTrackerPPCallbacks(AST->getCurrentTopLevelHashValue()));
>>> -    std::vector<ASTConsumer*> Consumers;
>>> +    std::vector<std::unique_ptr<ASTConsumer>> Consumers;
>>>        if (Clang->hasASTConsumer())
>>>          Consumers.push_back(Clang->takeASTConsumer());
>>> -    Consumers.push_back(new TopLevelDeclTrackerConsumer(*AST,
>>> -
>>> AST->getCurrentTopLevelHashValue()));
>>> -    Clang->setASTConsumer(new MultiplexConsumer(Consumers));
>>> +    Consumers.push_back(llvm::make_unique<TopLevelDeclTrackerConsumer>(
>>> +        *AST, AST->getCurrentTopLevelHashValue()));
>>> +    Clang->setASTConsumer(
>>> +        llvm::make_unique<MultiplexConsumer>(std::move(Consumers)));
>>>      }
>>>      if (!Act->Execute()) {
>>>        AST->transferASTDataFromCompilerInstance(*Clang);
>>>
>>> Modified: cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp Thu Jul 17 15:40:36
>>> 2014
>>> @@ -158,12 +158,12 @@ IntrusiveRefCntPtr<ExternalSemaSource> c
>>>          SmallVector<char, 256> serialAST;
>>>        llvm::raw_svector_ostream OS(serialAST);
>>> -    std::unique_ptr<ASTConsumer> consumer;
>>> -    consumer.reset(new PCHGenerator(Clang->getPreprocessor(), "-",
>>> nullptr,
>>> -                                    /*isysroot=*/"", &OS));
>>> +    auto consumer =
>>> +        llvm::make_unique<PCHGenerator>(Clang->getPreprocessor(), "-",
>>> nullptr,
>>> +                                        /*isysroot=*/"", &OS);
>>>        Clang->getASTContext().setASTMutationListener(
>>>
>>> consumer->GetASTMutationListener());
>>> -    Clang->setASTConsumer(consumer.release());
>>> +    Clang->setASTConsumer(std::move(consumer));
>>>        Clang->createSema(TU_Prefix, nullptr);
>>>          if (firstInclude) {
>>>
>>> Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Thu Jul 17 15:40:36 2014
>>> @@ -101,8 +101,8 @@ void CompilerInstance::setSema(Sema *S)
>>>      TheSema.reset(S);
>>>    }
>>>    -void CompilerInstance::setASTConsumer(ASTConsumer *Value) {
>>> -  Consumer.reset(Value);
>>> +void CompilerInstance::setASTConsumer(std::unique_ptr<ASTConsumer> Value)
>>> {
>>> +  Consumer = std::move(Value);
>>>    }
>>>      void CompilerInstance::setCodeCompletionConsumer(CodeCompleteConsumer
>>> *Value) {
>>>
>>> Modified: cfe/trunk/lib/Frontend/FrontendAction.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendAction.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/FrontendAction.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/FrontendAction.cpp Thu Jul 17 15:40:36 2014
>>> @@ -134,9 +134,10 @@ void FrontendAction::setCurrentInput(con
>>>      CurrentASTUnit.reset(AST);
>>>    }
>>>    -ASTConsumer* FrontendAction::CreateWrappedASTConsumer(CompilerInstance
>>> &CI,
>>> -                                                      StringRef InFile) {
>>> -  ASTConsumer* Consumer = CreateASTConsumer(CI, InFile);
>>> +std::unique_ptr<ASTConsumer>
>>> +FrontendAction::CreateWrappedASTConsumer(CompilerInstance &CI,
>>> +                                         StringRef InFile) {
>>> +  std::unique_ptr<ASTConsumer> Consumer = CreateASTConsumer(CI, InFile);
>>>      if (!Consumer)
>>>        return nullptr;
>>>    @@ -145,7 +146,8 @@ ASTConsumer* FrontendAction::CreateWrapp
>>>        // Make sure the non-plugin consumer is first, so that plugins can't
>>>      // modifiy the AST.
>>> -  std::vector<ASTConsumer*> Consumers(1, Consumer);
>>> +  std::vector<std::unique_ptr<ASTConsumer>> Consumers;
>>> +  Consumers.push_back(std::move(Consumer));
>>>        for (size_t i = 0, e = CI.getFrontendOpts().AddPluginActions.size();
>>>           i != e; ++i) {
>>> @@ -155,16 +157,15 @@ ASTConsumer* FrontendAction::CreateWrapp
>>>            it = FrontendPluginRegistry::begin(),
>>>            ie = FrontendPluginRegistry::end();
>>>            it != ie; ++it) {
>>> -      if (it->getName() == CI.getFrontendOpts().AddPluginActions[i]) {
>>> -        std::unique_ptr<PluginASTAction> P(it->instantiate());
>>> -        FrontendAction* c = P.get();
>>> -        if (P->ParseArgs(CI, CI.getFrontendOpts().AddPluginArgs[i]))
>>> -          Consumers.push_back(c->CreateASTConsumer(CI, InFile));
>>> -      }
>>> +      if (it->getName() != CI.getFrontendOpts().AddPluginActions[i])
>>> +        continue;
>>> +      std::unique_ptr<PluginASTAction> P = it->instantiate();
>>> +      if (P->ParseArgs(CI, CI.getFrontendOpts().AddPluginArgs[i]))
>>> +        Consumers.push_back(P->CreateASTConsumer(CI, InFile));
>>>        }
>>>      }
>>>    -  return new MultiplexConsumer(Consumers);
>>> +  return llvm::make_unique<MultiplexConsumer>(std::move(Consumers));
>>>    }
>>>      bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
>>> @@ -307,8 +308,8 @@ bool FrontendAction::BeginSourceFile(Com
>>>      if (!usesPreprocessorOnly()) {
>>>        CI.createASTContext();
>>>    -    std::unique_ptr<ASTConsumer> Consumer(
>>> -        CreateWrappedASTConsumer(CI, InputFile));
>>> +    std::unique_ptr<ASTConsumer> Consumer =
>>> +        CreateWrappedASTConsumer(CI, InputFile);
>>>        if (!Consumer)
>>>          goto failure;
>>>    @@ -349,7 +350,7 @@ bool FrontendAction::BeginSourceFile(Com
>>>            goto failure;
>>>        }
>>>    -    CI.setASTConsumer(Consumer.release());
>>> +    CI.setASTConsumer(std::move(Consumer));
>>>        if (!CI.hasASTConsumer())
>>>          goto failure;
>>>      }
>>> @@ -444,7 +445,7 @@ void FrontendAction::EndSourceFile() {
>>>          CI.resetAndLeakSema();
>>>          CI.resetAndLeakASTContext();
>>>        }
>>> -    BuryPointer(CI.takeASTConsumer());
>>> +    BuryPointer(CI.takeASTConsumer().get());
>>>      } else {
>>>        if (!isCurrentFileAST()) {
>>>          CI.setSema(nullptr);
>>> @@ -516,14 +517,15 @@ void ASTFrontendAction::ExecuteAction()
>>>      void PluginASTAction::anchor() { }
>>>    -ASTConsumer *
>>> +std::unique_ptr<ASTConsumer>
>>>    PreprocessorFrontendAction::CreateASTConsumer(CompilerInstance &CI,
>>>                                                  StringRef InFile) {
>>>      llvm_unreachable("Invalid CreateASTConsumer on preprocessor action!");
>>>    }
>>>    -ASTConsumer *WrapperFrontendAction::CreateASTConsumer(CompilerInstance
>>> &CI,
>>> -                                                      StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +WrapperFrontendAction::CreateASTConsumer(CompilerInstance &CI,
>>> +                                         StringRef InFile) {
>>>      return WrappedAction->CreateASTConsumer(CI, InFile);
>>>    }
>>>    bool WrapperFrontendAction::BeginInvocation(CompilerInstance &CI) {
>>>
>>> Modified: cfe/trunk/lib/Frontend/FrontendActions.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/FrontendActions.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/FrontendActions.cpp Thu Jul 17 15:40:36 2014
>>> @@ -33,9 +33,9 @@ using namespace clang;
>>>    // Custom Actions
>>>
>>> //===----------------------------------------------------------------------===//
>>>    -ASTConsumer *InitOnlyAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                               StringRef InFile) {
>>> -  return new ASTConsumer();
>>> +std::unique_ptr<ASTConsumer>
>>> +InitOnlyAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile)
>>> {
>>> +  return llvm::make_unique<ASTConsumer>();
>>>    }
>>>      void InitOnlyAction::ExecuteAction() {
>>> @@ -45,36 +45,37 @@ void InitOnlyAction::ExecuteAction() {
>>>    // AST Consumer Actions
>>>
>>> //===----------------------------------------------------------------------===//
>>>    -ASTConsumer *ASTPrintAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                               StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +ASTPrintAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile)
>>> {
>>>      if (raw_ostream *OS = CI.createDefaultOutputFile(false, InFile))
>>>        return CreateASTPrinter(OS, CI.getFrontendOpts().ASTDumpFilter);
>>>      return nullptr;
>>>    }
>>>    -ASTConsumer *ASTDumpAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                              StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +ASTDumpAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile)
>>> {
>>>      return CreateASTDumper(CI.getFrontendOpts().ASTDumpFilter,
>>>                             CI.getFrontendOpts().ASTDumpLookups);
>>>    }
>>>    -ASTConsumer *ASTDeclListAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                                  StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +ASTDeclListAction::CreateASTConsumer(CompilerInstance &CI, StringRef
>>> InFile) {
>>>      return CreateASTDeclNodeLister();
>>>    }
>>>    -ASTConsumer *ASTViewAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                              StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +ASTViewAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile)
>>> {
>>>      return CreateASTViewer();
>>>    }
>>>    -ASTConsumer *DeclContextPrintAction::CreateASTConsumer(CompilerInstance
>>> &CI,
>>> -                                                       StringRef InFile)
>>> {
>>> +std::unique_ptr<ASTConsumer>
>>> +DeclContextPrintAction::CreateASTConsumer(CompilerInstance &CI,
>>> +                                          StringRef InFile) {
>>>      return CreateDeclContextPrinter();
>>>    }
>>>    -ASTConsumer *GeneratePCHAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                                  StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +GeneratePCHAction::CreateASTConsumer(CompilerInstance &CI, StringRef
>>> InFile) {
>>>      std::string Sysroot;
>>>      std::string OutputFile;
>>>      raw_ostream *OS = nullptr;
>>> @@ -83,8 +84,8 @@ ASTConsumer *GeneratePCHAction::CreateAS
>>>        if (!CI.getFrontendOpts().RelocatablePCH)
>>>        Sysroot.clear();
>>> -  return new PCHGenerator(CI.getPreprocessor(), OutputFile, nullptr,
>>> Sysroot,
>>> -                          OS);
>>> +  return llvm::make_unique<PCHGenerator>(CI.getPreprocessor(),
>>> OutputFile,
>>> +                                         nullptr, Sysroot, OS);
>>>    }
>>>      bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance
>>> &CI,
>>> @@ -111,16 +112,17 @@ bool GeneratePCHAction::ComputeASTConsum
>>>      return false;
>>>    }
>>>    -ASTConsumer *GenerateModuleAction::CreateASTConsumer(CompilerInstance
>>> &CI,
>>> -                                                     StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +GenerateModuleAction::CreateASTConsumer(CompilerInstance &CI,
>>> +                                        StringRef InFile) {
>>>      std::string Sysroot;
>>>      std::string OutputFile;
>>>      raw_ostream *OS = nullptr;
>>>      if (ComputeASTConsumerArguments(CI, InFile, Sysroot, OutputFile, OS))
>>>        return nullptr;
>>>    -  return new PCHGenerator(CI.getPreprocessor(), OutputFile, Module,
>>> -                          Sysroot, OS);
>>> +  return llvm::make_unique<PCHGenerator>(CI.getPreprocessor(),
>>> OutputFile,
>>> +                                         Module, Sysroot, OS);
>>>    }
>>>      static SmallVectorImpl<char> &
>>> @@ -363,19 +365,20 @@ bool GenerateModuleAction::ComputeASTCon
>>>      return false;
>>>    }
>>>    -ASTConsumer *SyntaxOnlyAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                                 StringRef InFile) {
>>> -  return new ASTConsumer();
>>> +std::unique_ptr<ASTConsumer>
>>> +SyntaxOnlyAction::CreateASTConsumer(CompilerInstance &CI, StringRef
>>> InFile) {
>>> +  return llvm::make_unique<ASTConsumer>();
>>>    }
>>>    -ASTConsumer *DumpModuleInfoAction::CreateASTConsumer(CompilerInstance
>>> &CI,
>>> -                                                     StringRef InFile) {
>>> -  return new ASTConsumer();
>>> +std::unique_ptr<ASTConsumer>
>>> +DumpModuleInfoAction::CreateASTConsumer(CompilerInstance &CI,
>>> +                                        StringRef InFile) {
>>> +  return llvm::make_unique<ASTConsumer>();
>>>    }
>>>    -ASTConsumer *VerifyPCHAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                                StringRef InFile) {
>>> -  return new ASTConsumer();
>>> +std::unique_ptr<ASTConsumer>
>>> +VerifyPCHAction::CreateASTConsumer(CompilerInstance &CI, StringRef
>>> InFile) {
>>> +  return llvm::make_unique<ASTConsumer>();
>>>    }
>>>      void VerifyPCHAction::ExecuteAction() {
>>>
>>> Modified: cfe/trunk/lib/Frontend/MultiplexConsumer.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/MultiplexConsumer.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/MultiplexConsumer.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/MultiplexConsumer.cpp Thu Jul 17 15:40:36 2014
>>> @@ -183,118 +183,113 @@ void MultiplexASTMutationListener::Decla
>>>      }  // end namespace clang
>>>    -MultiplexConsumer::MultiplexConsumer(ArrayRef<ASTConsumer *> C)
>>> -    : Consumers(C.begin(), C.end()), MutationListener(),
>>> -      DeserializationListener() {
>>> +MultiplexConsumer::MultiplexConsumer(
>>> +    std::vector<std::unique_ptr<ASTConsumer>> C)
>>> +    : Consumers(std::move(C)), MutationListener(),
>>> DeserializationListener() {
>>>      // Collect the mutation listeners and deserialization listeners of all
>>>      // children, and create a multiplex listener each if so.
>>>      std::vector<ASTMutationListener*> mutationListeners;
>>>      std::vector<ASTDeserializationListener*> serializationListeners;
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i) {
>>> -    ASTMutationListener* mutationListener =
>>> -        Consumers[i]->GetASTMutationListener();
>>> -    if (mutationListener)
>>> +  for (auto &Consumer : Consumers) {
>>> +    if (auto *mutationListener = Consumer->GetASTMutationListener())
>>>          mutationListeners.push_back(mutationListener);
>>> -    ASTDeserializationListener* serializationListener =
>>> -        Consumers[i]->GetASTDeserializationListener();
>>> -    if (serializationListener)
>>> +    if (auto *serializationListener =
>>> Consumer->GetASTDeserializationListener())
>>>          serializationListeners.push_back(serializationListener);
>>>      }
>>> -  if (mutationListeners.size()) {
>>> -    MutationListener.reset(new
>>> MultiplexASTMutationListener(mutationListeners));
>>> +  if (!mutationListeners.empty()) {
>>> +    MutationListener =
>>> +
>>> llvm::make_unique<MultiplexASTMutationListener>(mutationListeners);
>>>      }
>>> -  if (serializationListeners.size()) {
>>> -    DeserializationListener.reset(
>>> -        new MultiplexASTDeserializationListener(serializationListeners));
>>> +  if (!serializationListeners.empty()) {
>>> +    DeserializationListener =
>>> +        llvm::make_unique<MultiplexASTDeserializationListener>(
>>> +            serializationListeners);
>>>      }
>>>    }
>>>    -MultiplexConsumer::~MultiplexConsumer() {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    delete Consumers[i];
>>> -}
>>> +MultiplexConsumer::~MultiplexConsumer() {}
>>>      void MultiplexConsumer::Initialize(ASTContext &Context) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->Initialize(Context);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->Initialize(Context);
>>>    }
>>>      bool MultiplexConsumer::HandleTopLevelDecl(DeclGroupRef D) {
>>>      bool Continue = true;
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Continue = Continue && Consumers[i]->HandleTopLevelDecl(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Continue = Continue && Consumer->HandleTopLevelDecl(D);
>>>      return Continue;
>>>    }
>>>      void MultiplexConsumer::HandleInlineMethodDefinition(CXXMethodDecl *D)
>>> {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleInlineMethodDefinition(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleInlineMethodDefinition(D);
>>>    }
>>>    -void  MultiplexConsumer::HandleCXXStaticMemberVarInstantiation(VarDecl
>>> *VD) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleCXXStaticMemberVarInstantiation(VD);
>>> +void MultiplexConsumer::HandleCXXStaticMemberVarInstantiation(VarDecl
>>> *VD) {
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleCXXStaticMemberVarInstantiation(VD);
>>>    }
>>>      void MultiplexConsumer::HandleInterestingDecl(DeclGroupRef D) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleInterestingDecl(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleInterestingDecl(D);
>>>    }
>>>      void MultiplexConsumer::HandleTranslationUnit(ASTContext &Ctx) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleTranslationUnit(Ctx);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleTranslationUnit(Ctx);
>>>    }
>>>      void MultiplexConsumer::HandleTagDeclDefinition(TagDecl *D) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleTagDeclDefinition(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleTagDeclDefinition(D);
>>>    }
>>>      void MultiplexConsumer::HandleTagDeclRequiredDefinition(const TagDecl
>>> *D) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleTagDeclRequiredDefinition(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleTagDeclRequiredDefinition(D);
>>>    }
>>>      void
>>> MultiplexConsumer::HandleCXXImplicitFunctionInstantiation(FunctionDecl *D){
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleCXXImplicitFunctionInstantiation(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleCXXImplicitFunctionInstantiation(D);
>>>    }
>>>      void MultiplexConsumer::HandleTopLevelDeclInObjCContainer(DeclGroupRef
>>> D) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleTopLevelDeclInObjCContainer(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleTopLevelDeclInObjCContainer(D);
>>>    }
>>>      void MultiplexConsumer::HandleImplicitImportDecl(ImportDecl *D) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleImplicitImportDecl(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleImplicitImportDecl(D);
>>>    }
>>>      void MultiplexConsumer::HandleLinkerOptionPragma(llvm::StringRef Opts)
>>> {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleLinkerOptionPragma(Opts);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleLinkerOptionPragma(Opts);
>>>    }
>>>      void MultiplexConsumer::HandleDetectMismatch(llvm::StringRef Name,
>>> llvm::StringRef Value) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleDetectMismatch(Name, Value);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleDetectMismatch(Name, Value);
>>>    }
>>>      void MultiplexConsumer::HandleDependentLibrary(llvm::StringRef Lib) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleDependentLibrary(Lib);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleDependentLibrary(Lib);
>>>    }
>>>      void MultiplexConsumer::CompleteTentativeDefinition(VarDecl *D) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->CompleteTentativeDefinition(D);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->CompleteTentativeDefinition(D);
>>>    }
>>>      void MultiplexConsumer::HandleVTable(
>>>        CXXRecordDecl *RD, bool DefinitionRequired) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->HandleVTable(RD, DefinitionRequired);
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->HandleVTable(RD, DefinitionRequired);
>>>    }
>>>      ASTMutationListener *MultiplexConsumer::GetASTMutationListener() {
>>> @@ -306,18 +301,18 @@ ASTDeserializationListener *MultiplexCon
>>>    }
>>>      void MultiplexConsumer::PrintStats() {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    Consumers[i]->PrintStats();
>>> +  for (auto &Consumer : Consumers)
>>> +    Consumer->PrintStats();
>>>    }
>>>      void MultiplexConsumer::InitializeSema(Sema &S) {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    if (SemaConsumer *SC = dyn_cast<SemaConsumer>(Consumers[i]))
>>> +  for (auto &Consumer : Consumers)
>>> +    if (SemaConsumer *SC = dyn_cast<SemaConsumer>(Consumer.get()))
>>>          SC->InitializeSema(S);
>>>    }
>>>      void MultiplexConsumer::ForgetSema() {
>>> -  for (size_t i = 0, e = Consumers.size(); i != e; ++i)
>>> -    if (SemaConsumer *SC = dyn_cast<SemaConsumer>(Consumers[i]))
>>> +  for (auto &Consumer : Consumers)
>>> +    if (SemaConsumer *SC = dyn_cast<SemaConsumer>(Consumer.get()))
>>>          SC->ForgetSema();
>>>    }
>>>
>>> Modified: cfe/trunk/lib/Frontend/Rewrite/FrontendActions.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/Rewrite/FrontendActions.cpp?rev=213307&r1=213306&r2=213307&view=diff
>>>
>>> ==============================================================================
>>> --- cfe/trunk/lib/Frontend/Rewrite/FrontendActions.cpp (original)
>>> +++ cfe/trunk/lib/Frontend/Rewrite/FrontendActions.cpp Thu Jul 17 15:40:36
>>> 2014
>>> @@ -30,8 +30,8 @@ using namespace clang;
>>>    // AST Consumer Actions
>>>
>>> //===----------------------------------------------------------------------===//
>>>    -ASTConsumer *HTMLPrintAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                                StringRef InFile) {
>>> +std::unique_ptr<ASTConsumer>
>>> +HTMLPrintAction::CreateASTConsumer(CompilerInstance &CI, StringRef
>>> InFile) {
>>>      if (raw_ostream *OS = CI.createDefaultOutputFile(false, InFile))
>>>        return CreateHTMLPrinter(OS, CI.getPreprocessor());
>>>      return nullptr;
>>> @@ -40,9 +40,9 @@ ASTConsumer *HTMLPrintAction::CreateASTC
>>>    FixItAction::FixItAction() {}
>>>    FixItAction::~FixItAction() {}
>>>    -ASTConsumer *FixItAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                            StringRef InFile) {
>>> -  return new ASTConsumer();
>>> +std::unique_ptr<ASTConsumer>
>>> +FixItAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
>>> +  return llvm::make_unique<ASTConsumer>();
>>>    }
>>>      namespace {
>>> @@ -148,8 +148,8 @@ bool FixItRecompile::BeginInvocation(Com
>>>      #ifdef CLANG_ENABLE_OBJC_REWRITER
>>>    -ASTConsumer *RewriteObjCAction::CreateASTConsumer(CompilerInstance &CI,
>>> -                                                  StringRef InFile) {

-- 
http://www.nuanti.com
the browser experts




More information about the cfe-commits mailing list