<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>