<div dir="ltr">FWIW, I tried to do something like this, perhaps with some other improvements, a few years ago. Not sure if things have changed for the better since then, but maybe those old patches may provide some insight/other improvements/options:<br><br><a href="http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20140915/115122.html">http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20140915/115122.html</a><br><a href="http://reviews.llvm.org/D4313">http://reviews.llvm.org/D4313</a><br><a href="http://reviews.llvm.org/D4312">http://reviews.llvm.org/D4312</a><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Feb 7, 2016 at 11:28 AM, Argyrios Kyrtzidis via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: akirtzidis<br>
Date: Sun Feb  7 13:28:36 2016<br>
New Revision: 260048<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=260048&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=260048&view=rev</a><br>
Log:<br>
[Frontend] Make the memory management of FrontendAction pointers explicit by using unique_ptr.<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h<br>
    cfe/trunk/include/clang/Frontend/FrontendAction.h<br>
    cfe/trunk/include/clang/Frontend/FrontendActions.h<br>
    cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h<br>
    cfe/trunk/lib/ARCMigrate/ARCMTActions.cpp<br>
    cfe/trunk/lib/ARCMigrate/ObjCMT.cpp<br>
    cfe/trunk/lib/Frontend/ASTMerge.cpp<br>
    cfe/trunk/lib/Frontend/FrontendAction.cpp<br>
    cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp<br>
<br>
Modified: cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h (original)<br>
+++ cfe/trunk/include/clang/ARCMigrate/ARCMTActions.h Sun Feb  7 13:28:36 2016<br>
@@ -22,7 +22,7 @@ protected:<br>
   bool BeginInvocation(CompilerInstance &CI) override;<br>
<br>
 public:<br>
-  CheckAction(FrontendAction *WrappedAction);<br>
+  CheckAction(std::unique_ptr<FrontendAction> WrappedAction);<br>
 };<br>
<br>
 class ModifyAction : public WrapperFrontendAction {<br>
@@ -30,7 +30,7 @@ protected:<br>
   bool BeginInvocation(CompilerInstance &CI) override;<br>
<br>
 public:<br>
-  ModifyAction(FrontendAction *WrappedAction);<br>
+  ModifyAction(std::unique_ptr<FrontendAction> WrappedAction);<br>
 };<br>
<br>
 class MigrateSourceAction : public ASTFrontendAction {<br>
@@ -49,7 +49,8 @@ protected:<br>
   bool BeginInvocation(CompilerInstance &CI) override;<br>
<br>
 public:<br>
-  MigrateAction(FrontendAction *WrappedAction, StringRef migrateDir,<br>
+  MigrateAction(std::unique_ptr<FrontendAction> WrappedAction,<br>
+                StringRef migrateDir,<br>
                 StringRef plistOut,<br>
                 bool emitPremigrationARCErrors);<br>
 };<br>
@@ -61,8 +62,8 @@ class ObjCMigrateAction : public Wrapper<br>
   FileRemapper Remapper;<br>
   CompilerInstance *CompInst;<br>
 public:<br>
-  ObjCMigrateAction(FrontendAction *WrappedAction, StringRef migrateDir,<br>
-                    unsigned migrateAction);<br>
+  ObjCMigrateAction(std::unique_ptr<FrontendAction> WrappedAction,<br>
+                    StringRef migrateDir, unsigned migrateAction);<br>
<br>
 protected:<br>
   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,<br>
<br>
Modified: cfe/trunk/include/clang/Frontend/FrontendAction.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendAction.h?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendAction.h?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Frontend/FrontendAction.h (original)<br>
+++ cfe/trunk/include/clang/Frontend/FrontendAction.h Sun Feb  7 13:28:36 2016<br>
@@ -283,7 +283,7 @@ protected:<br>
 public:<br>
   /// Construct a WrapperFrontendAction from an existing action, taking<br>
   /// ownership of it.<br>
-  WrapperFrontendAction(FrontendAction *WrappedAction);<br>
+  WrapperFrontendAction(std::unique_ptr<FrontendAction> WrappedAction);<br>
<br>
   bool usesPreprocessorOnly() const override;<br>
   TranslationUnitKind getTranslationUnitKind() override;<br>
<br>
Modified: cfe/trunk/include/clang/Frontend/FrontendActions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendActions.h?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendActions.h?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Frontend/FrontendActions.h (original)<br>
+++ cfe/trunk/include/clang/Frontend/FrontendActions.h Sun Feb  7 13:28:36 2016<br>
@@ -168,7 +168,7 @@ public:<br>
  */<br>
 class ASTMergeAction : public FrontendAction {<br>
   /// \brief The action that the merge action adapts.<br>
-  FrontendAction *AdaptedAction;<br>
+  std::unique_ptr<FrontendAction> AdaptedAction;<br>
<br>
   /// \brief The set of AST files to merge.<br>
   std::vector<std::string> ASTFiles;<br>
@@ -184,7 +184,8 @@ protected:<br>
   void EndSourceFileAction() override;<br>
<br>
 public:<br>
-  ASTMergeAction(FrontendAction *AdaptedAction, ArrayRef<std::string> ASTFiles);<br>
+  ASTMergeAction(std::unique_ptr<FrontendAction> AdaptedAction,<br>
+                 ArrayRef<std::string> ASTFiles);<br>
   ~ASTMergeAction() override;<br>
<br>
   bool usesPreprocessorOnly() const override;<br>
<br>
Modified: cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h (original)<br>
+++ cfe/trunk/include/clang/Rewrite/Frontend/FrontendActions.h Sun Feb  7 13:28:36 2016<br>
@@ -50,8 +50,8 @@ public:<br>
 /// frontend action.<br>
 class FixItRecompile : public WrapperFrontendAction {<br>
 public:<br>
-  FixItRecompile(FrontendAction *WrappedAction)<br>
-    : WrapperFrontendAction(WrappedAction) {}<br>
+  FixItRecompile(std::unique_ptr<FrontendAction> WrappedAction)<br>
+    : WrapperFrontendAction(std::move(WrappedAction)) {}<br>
<br>
 protected:<br>
   bool BeginInvocation(CompilerInstance &CI) override;<br>
<br>
Modified: cfe/trunk/lib/ARCMigrate/ARCMTActions.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ARCMTActions.cpp?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ARCMTActions.cpp?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/ARCMigrate/ARCMTActions.cpp (original)<br>
+++ cfe/trunk/lib/ARCMigrate/ARCMTActions.cpp Sun Feb  7 13:28:36 2016<br>
@@ -25,8 +25,8 @@ bool CheckAction::BeginInvocation(Compil<br>
   return true;<br>
 }<br>
<br>
-CheckAction::CheckAction(FrontendAction *WrappedAction)<br>
-  : WrapperFrontendAction(WrappedAction) {}<br>
+CheckAction::CheckAction(std::unique_ptr<FrontendAction> WrappedAction)<br>
+  : WrapperFrontendAction(std::move(WrappedAction)) {}<br>
<br>
 bool ModifyAction::BeginInvocation(CompilerInstance &CI) {<br>
   return !arcmt::applyTransformations(CI.getInvocation(), getCurrentInput(),<br>
@@ -34,8 +34,8 @@ bool ModifyAction::BeginInvocation(Compi<br>
                                       CI.getDiagnostics().getClient());<br>
 }<br>
<br>
-ModifyAction::ModifyAction(FrontendAction *WrappedAction)<br>
-  : WrapperFrontendAction(WrappedAction) {}<br>
+ModifyAction::ModifyAction(std::unique_ptr<FrontendAction> WrappedAction)<br>
+  : WrapperFrontendAction(std::move(WrappedAction)) {}<br>
<br>
 bool MigrateAction::BeginInvocation(CompilerInstance &CI) {<br>
   if (arcmt::migrateWithTemporaryFiles(<br>
@@ -49,11 +49,11 @@ bool MigrateAction::BeginInvocation(Comp<br>
   return true;<br>
 }<br>
<br>
-MigrateAction::MigrateAction(FrontendAction *WrappedAction,<br>
+MigrateAction::MigrateAction(std::unique_ptr<FrontendAction> WrappedAction,<br>
                              StringRef migrateDir,<br>
                              StringRef plistOut,<br>
                              bool emitPremigrationARCErrors)<br>
-  : WrapperFrontendAction(WrappedAction), MigrateDir(migrateDir),<br>
+  : WrapperFrontendAction(std::move(WrappedAction)), MigrateDir(migrateDir),<br>
     PlistOut(plistOut), EmitPremigrationARCErros(emitPremigrationARCErrors) {<br>
   if (MigrateDir.empty())<br>
     MigrateDir = "."; // user current directory if none is given.<br>
<br>
Modified: cfe/trunk/lib/ARCMigrate/ObjCMT.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original)<br>
+++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Sun Feb  7 13:28:36 2016<br>
@@ -179,10 +179,11 @@ protected:<br>
<br>
 }<br>
<br>
-ObjCMigrateAction::ObjCMigrateAction(FrontendAction *WrappedAction,<br>
+ObjCMigrateAction::ObjCMigrateAction(<br>
+                                  std::unique_ptr<FrontendAction> WrappedAction,<br>
                                      StringRef migrateDir,<br>
                                      unsigned migrateAction)<br>
-  : WrapperFrontendAction(WrappedAction), MigrateDir(migrateDir),<br>
+  : WrapperFrontendAction(std::move(WrappedAction)), MigrateDir(migrateDir),<br>
     ObjCMigAction(migrateAction),<br>
     CompInst(nullptr) {<br>
   if (MigrateDir.empty())<br>
<br>
Modified: cfe/trunk/lib/Frontend/ASTMerge.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTMerge.cpp?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTMerge.cpp?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/ASTMerge.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/ASTMerge.cpp Sun Feb  7 13:28:36 2016<br>
@@ -83,14 +83,13 @@ void ASTMergeAction::EndSourceFileAction<br>
   return AdaptedAction->EndSourceFileAction();<br>
 }<br>
<br>
-ASTMergeAction::ASTMergeAction(FrontendAction *AdaptedAction,<br>
+ASTMergeAction::ASTMergeAction(std::unique_ptr<FrontendAction> adaptedAction,<br>
                                ArrayRef<std::string> ASTFiles)<br>
-  : AdaptedAction(AdaptedAction), ASTFiles(ASTFiles.begin(), ASTFiles.end()) {<br>
+: AdaptedAction(std::move(adaptedAction)), ASTFiles(ASTFiles.begin(), ASTFiles.end()) {<br>
   assert(AdaptedAction && "ASTMergeAction needs an action to adapt");<br>
 }<br>
<br>
 ASTMergeAction::~ASTMergeAction() {<br>
-  delete AdaptedAction;<br>
 }<br>
<br>
 bool ASTMergeAction::usesPreprocessorOnly() const {<br>
<br>
Modified: cfe/trunk/lib/Frontend/FrontendAction.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendAction.cpp?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendAction.cpp?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Frontend/FrontendAction.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/FrontendAction.cpp Sun Feb  7 13:28:36 2016<br>
@@ -587,6 +587,7 @@ bool WrapperFrontendAction::hasCodeCompl<br>
   return WrappedAction->hasCodeCompletionSupport();<br>
 }<br>
<br>
-WrapperFrontendAction::WrapperFrontendAction(FrontendAction *WrappedAction)<br>
-  : WrappedAction(WrappedAction) {}<br>
+WrapperFrontendAction::WrapperFrontendAction(<br>
+    std::unique_ptr<FrontendAction> WrappedAction)<br>
+  : WrappedAction(std::move(WrappedAction)) {}<br>
<br>
<br>
Modified: cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp?rev=260048&r1=260047&r2=260048&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp?rev=260048&r1=260047&r2=260048&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp (original)<br>
+++ cfe/trunk/lib/FrontendTool/ExecuteCompilerInvocation.cpp Sun Feb  7 13:28:36 2016<br>
@@ -31,33 +31,34 @@<br>
 using namespace clang;<br>
 using namespace llvm::opt;<br>
<br>
-static FrontendAction *CreateFrontendBaseAction(CompilerInstance &CI) {<br>
+static std::unique_ptr<FrontendAction><br>
+CreateFrontendBaseAction(CompilerInstance &CI) {<br>
   using namespace clang::frontend;<br>
   StringRef Action("unknown");<br>
   (void)Action;<br>
<br>
   switch (CI.getFrontendOpts().ProgramAction) {<br>
-  case ASTDeclList:            return new ASTDeclListAction();<br>
-  case ASTDump:                return new ASTDumpAction();<br>
-  case ASTPrint:               return new ASTPrintAction();<br>
-  case ASTView:                return new ASTViewAction();<br>
-  case DumpRawTokens:          return new DumpRawTokensAction();<br>
-  case DumpTokens:             return new DumpTokensAction();<br>
-  case EmitAssembly:           return new EmitAssemblyAction();<br>
-  case EmitBC:                 return new EmitBCAction();<br>
-  case EmitHTML:               return new HTMLPrintAction();<br>
-  case EmitLLVM:               return new EmitLLVMAction();<br>
-  case EmitLLVMOnly:           return new EmitLLVMOnlyAction();<br>
-  case EmitCodeGenOnly:        return new EmitCodeGenOnlyAction();<br>
-  case EmitObj:                return new EmitObjAction();<br>
-  case FixIt:                  return new FixItAction();<br>
-  case GenerateModule:         return new GenerateModuleAction;<br>
-  case GeneratePCH:            return new GeneratePCHAction;<br>
-  case GeneratePTH:            return new GeneratePTHAction();<br>
-  case InitOnly:               return new InitOnlyAction();<br>
-  case ParseSyntaxOnly:        return new SyntaxOnlyAction();<br>
-  case ModuleFileInfo:         return new DumpModuleInfoAction();<br>
-  case VerifyPCH:              return new VerifyPCHAction();<br>
+  case ASTDeclList:            return llvm::make_unique<ASTDeclListAction>();<br>
+  case ASTDump:                return llvm::make_unique<ASTDumpAction>();<br>
+  case ASTPrint:               return llvm::make_unique<ASTPrintAction>();<br>
+  case ASTView:                return llvm::make_unique<ASTViewAction>();<br>
+  case DumpRawTokens:          return llvm::make_unique<DumpRawTokensAction>();<br>
+  case DumpTokens:             return llvm::make_unique<DumpTokensAction>();<br>
+  case EmitAssembly:           return llvm::make_unique<EmitAssemblyAction>();<br>
+  case EmitBC:                 return llvm::make_unique<EmitBCAction>();<br>
+  case EmitHTML:               return llvm::make_unique<HTMLPrintAction>();<br>
+  case EmitLLVM:               return llvm::make_unique<EmitLLVMAction>();<br>
+  case EmitLLVMOnly:           return llvm::make_unique<EmitLLVMOnlyAction>();<br>
+  case EmitCodeGenOnly:        return llvm::make_unique<EmitCodeGenOnlyAction>();<br>
+  case EmitObj:                return llvm::make_unique<EmitObjAction>();<br>
+  case FixIt:                  return llvm::make_unique<FixItAction>();<br>
+  case GenerateModule:         return llvm::make_unique<GenerateModuleAction>();<br>
+  case GeneratePCH:            return llvm::make_unique<GeneratePCHAction>();<br>
+  case GeneratePTH:            return llvm::make_unique<GeneratePTHAction>();<br>
+  case InitOnly:               return llvm::make_unique<InitOnlyAction>();<br>
+  case ParseSyntaxOnly:        return llvm::make_unique<SyntaxOnlyAction>();<br>
+  case ModuleFileInfo:         return llvm::make_unique<DumpModuleInfoAction>();<br>
+  case VerifyPCH:              return llvm::make_unique<VerifyPCHAction>();<br>
<br>
   case PluginAction: {<br>
     for (FrontendPluginRegistry::iterator it =<br>
@@ -67,7 +68,7 @@ static FrontendAction *CreateFrontendBas<br>
         std::unique_ptr<PluginASTAction> P(it->instantiate());<br>
         if (!P->ParseArgs(CI, CI.getFrontendOpts().PluginArgs))<br>
           return nullptr;<br>
-        return P.release();<br>
+        return std::move(P);<br>
       }<br>
     }<br>
<br>
@@ -76,32 +77,33 @@ static FrontendAction *CreateFrontendBas<br>
     return nullptr;<br>
   }<br>
<br>
-  case PrintDeclContext:       return new DeclContextPrintAction();<br>
-  case PrintPreamble:          return new PrintPreambleAction();<br>
+  case PrintDeclContext:       return llvm::make_unique<DeclContextPrintAction>();<br>
+  case PrintPreamble:          return llvm::make_unique<PrintPreambleAction>();<br>
   case PrintPreprocessedInput: {<br>
     if (CI.getPreprocessorOutputOpts().RewriteIncludes)<br>
-      return new RewriteIncludesAction();<br>
-    return new PrintPreprocessedAction();<br>
+      return llvm::make_unique<RewriteIncludesAction>();<br>
+    return llvm::make_unique<PrintPreprocessedAction>();<br>
   }<br>
<br>
-  case RewriteMacros:          return new RewriteMacrosAction();<br>
-  case RewriteTest:            return new RewriteTestAction();<br>
+  case RewriteMacros:          return llvm::make_unique<RewriteMacrosAction>();<br>
+  case RewriteTest:            return llvm::make_unique<RewriteTestAction>();<br>
 #ifdef CLANG_ENABLE_OBJC_REWRITER<br>
-  case RewriteObjC:            return new RewriteObjCAction();<br>
+  case RewriteObjC:            return llvm::make_unique<RewriteObjCAction>();<br>
 #else<br>
   case RewriteObjC:            Action = "RewriteObjC"; break;<br>
 #endif<br>
 #ifdef CLANG_ENABLE_ARCMT<br>
-  case MigrateSource:          return new arcmt::MigrateSourceAction();<br>
+  case MigrateSource:<br>
+    return llvm::make_unique<arcmt::MigrateSourceAction>();<br>
 #else<br>
   case MigrateSource:          Action = "MigrateSource"; break;<br>
 #endif<br>
 #ifdef CLANG_ENABLE_STATIC_ANALYZER<br>
-  case RunAnalysis:            return new ento::AnalysisAction();<br>
+  case RunAnalysis:            return llvm::make_unique<ento::AnalysisAction>();<br>
 #else<br>
   case RunAnalysis:            Action = "RunAnalysis"; break;<br>
 #endif<br>
-  case RunPreprocessorOnly:    return new PreprocessOnlyAction();<br>
+  case RunPreprocessorOnly:    return llvm::make_unique<PreprocessOnlyAction>();<br>
   }<br>
<br>
 #if !defined(CLANG_ENABLE_ARCMT) || !defined(CLANG_ENABLE_STATIC_ANALYZER) \<br>
@@ -113,16 +115,17 @@ static FrontendAction *CreateFrontendBas<br>
 #endif<br>
 }<br>
<br>
-static FrontendAction *CreateFrontendAction(CompilerInstance &CI) {<br>
+static std::unique_ptr<FrontendAction><br>
+CreateFrontendAction(CompilerInstance &CI) {<br>
   // Create the underlying action.<br>
-  FrontendAction *Act = CreateFrontendBaseAction(CI);<br>
+  std::unique_ptr<FrontendAction> Act = CreateFrontendBaseAction(CI);<br>
   if (!Act)<br>
     return nullptr;<br>
<br>
   const FrontendOptions &FEOpts = CI.getFrontendOpts();<br>
<br>
   if (FEOpts.FixAndRecompile) {<br>
-    Act = new FixItRecompile(Act);<br>
+    Act = llvm::make_unique<FixItRecompile>(std::move(Act));<br>
   }<br>
<br>
 #ifdef CLANG_ENABLE_ARCMT<br>
@@ -133,13 +136,13 @@ static FrontendAction *CreateFrontendAct<br>
     case FrontendOptions::ARCMT_None:<br>
       break;<br>
     case FrontendOptions::ARCMT_Check:<br>
-      Act = new arcmt::CheckAction(Act);<br>
+      Act = llvm::make_unique<arcmt::CheckAction>(std::move(Act));<br>
       break;<br>
     case FrontendOptions::ARCMT_Modify:<br>
-      Act = new arcmt::ModifyAction(Act);<br>
+      Act = llvm::make_unique<arcmt::ModifyAction>(std::move(Act));<br>
       break;<br>
     case FrontendOptions::ARCMT_Migrate:<br>
-      Act = new arcmt::MigrateAction(Act,<br>
+      Act = llvm::make_unique<arcmt::MigrateAction>(std::move(Act),<br>
                                      FEOpts.MTMigrateDir,<br>
                                      FEOpts.ARCMTMigrateReportOut,<br>
                                      FEOpts.ARCMTMigrateEmitARCErrors);<br>
@@ -147,8 +150,9 @@ static FrontendAction *CreateFrontendAct<br>
     }<br>
<br>
     if (FEOpts.ObjCMTAction != FrontendOptions::ObjCMT_None) {<br>
-      Act = new arcmt::ObjCMigrateAction(Act, FEOpts.MTMigrateDir,<br>
-                                         FEOpts.ObjCMTAction);<br>
+      Act = llvm::make_unique<arcmt::ObjCMigrateAction>(std::move(Act),<br>
+                                                        FEOpts.MTMigrateDir,<br>
+                                                        FEOpts.ObjCMTAction);<br>
     }<br>
   }<br>
 #endif<br>
@@ -156,7 +160,8 @@ static FrontendAction *CreateFrontendAct<br>
   // If there are any AST files to merge, create a frontend action<br>
   // adaptor to perform the merge.<br>
   if (!FEOpts.ASTMergeFiles.empty())<br>
-    Act = new ASTMergeAction(Act, FEOpts.ASTMergeFiles);<br>
+    Act = llvm::make_unique<ASTMergeAction>(std::move(Act),<br>
+                                            FEOpts.ASTMergeFiles);<br>
<br>
   return Act;<br>
 }<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>