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